Forum: PC-Programmierung länges eines Strings festlegen


von Matthias G. (hugo1986)


Lesenswert?

Hallo Zusammen,

ich habe folgendes Problem und benötige eure Hilfe.

Bestehender Code:

generiertes Header-File:
#define BENUTZER "Benutzer_1"
#define DATUM "140321"
#define HOST "PC1234"

selbstgeschriebenes C-File:
const char ID[] = DATUM "_" BENUTZER "_" HOST

Das Problem ist nun, dass nicht alle Benutzernamen die selbe Länge 
haben.
Beispiel:
Benutzer_1, Benutzer_12

Das Array ID[] muss jedoch immer die selbe Länge haben.

Könntet ihr mir sagen, wie ich das am einfachsten realisiere?

: Verschoben durch Moderator
von Amateur (Gast)


Lesenswert?

>const char ID[] = DATUM "_" BENUTZER "_" HOST

Der Compiler legt Konstanten immer "Bündig an. D.h. die Angabe
const char Etwas = 8;
bietet keinen Platz für Zahlen oberhalb von 255

Deshalb muss Du ID [] mit Größe, also z.B. ID [ 200 ] deklarieren. So 
200 in Summe, für den längsten String ausreicht.

Übrigens:
1. Schließt man die Definition einer Konstanten mit einem Semikolon ab.
2. Es ist schlechter Stil erst zu behaupten: "Du bist Konstant" und
   anschließend Änderungen vorzunehmen. Manche Compiler meckern hier.

von Matthias G. (hugo1986)


Lesenswert?

Hi,
das Semikolon hab ich vergessen.
Danke erstmal für die schnelle Antwort.
Das würde also heißen, dass wenn ich ihm die größe fest vorgebe
char Test[100] = String1 String2 usw.
dass das Array immer dieselbe größe hat? Da war ich mir nämlcih nicht 
sicher.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Matthias Gerber schrieb:
> Hi,
> das Semikolon hab ich vergessen.
> Danke erstmal für die schnelle Antwort.
> Das würde also heißen, dass wenn ich ihm die größe fest vorgebe
> char Test[100] = String1 String2 usw.
> dass das Array immer dieselbe größe hat? Da war ich mir nämlcih nicht
> sicher.

> char Test[100]
Das allein legt in diesem Fall die Grösse fest. Sind deine 
zusammengebastelten Strings länger, gibtz Probleme.

Im Falle von char Test[] = "String" errechnet der compiler die Länge von 
"String" und baut dementsprechend das array Test auf.

von Fred (Gast)


Lesenswert?

Amateur schrieb:
> Der Compiler legt Konstanten immer "Bündig an. D.h. die Angabe

Häh?

> const char Etwas = 8;
> bietet keinen Platz für Zahlen oberhalb von 255

Das liegt nicht an irgendetwas, was "bündig" ist (was soll das 
bedeuten?), sondern daran, daß char üblicherweise halt acht Bit hat.

> 2. Es ist schlechter Stil erst zu behaupten: "Du bist Konstant" und
>    anschließend Änderungen vorzunehmen. Manche Compiler meckern hier.

Das tut er ja auch nicht, und kein Compiler meckert da.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

warum brauchst du eine feste Grösse? Es gibt malloc, '\0', strcpy, ...

von Matthias G. (hugo1986)


Lesenswert?

Ok. Danke mal. Ich werd mal schauen b mir das weiterhilft

von Amateur (Gast)


Lesenswert?

Die Definition:

const char ID[] = DATUM "_" BENUTZER "_" HOST;

reserviert Platz für 24 Zeichen plus "\0".

Wenn der Compiler Änderungen zulässt, kannst Du in diesem Bereich machen 
was Du willst. Manchmal ist wegen des Alignments noch für das eine oder 
andere Zeichen dahinter Platz. Verlass Dich aber nicht darauf. Übrigens: 
Die obige Rechnung gilt nur für 8-Bit Zeichensätze.

von Fred (Gast)


Lesenswert?

Und wer hat danach gefragt?

von Karl H. (kbuchegg)


Lesenswert?

Matthias Gerber schrieb:

> dass das Array immer dieselbe größe hat? Da war ich mir nämlcih nicht
> sicher.

Das ist so, wie bei jedem anderen Array auch.

Das der Compiler für dich die Größe aus der Initialisierung ermitteln 
kann, ist nichts weiter als ein "Service" des Compilers, der in der 
Sprache so vorgesehen ist, damit man als Programmierer nicht stupide 
Elemente zählen muss, wenn der Compiler das genausogut machen kann. 
Würde dieser Service zu einem für dich nicht brauchbaren Ergebnis 
kommen, dann benutzt du eben diesen Service nicht und gibst die 
Arraylänge selbst direkt an.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.