länges eines Strings festlegen

OP #3584188
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?
Gast #3584218
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.
Persönliche Seite #3584272
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.
Gast #3584274
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.
Gast #3584284
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.
#3584339
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren