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
>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.
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.
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.
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.
warum brauchst du eine feste Grösse? Es gibt malloc, '\0', strcpy, ...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.