Hallo Tom,
Ist das erst in C++ so, dass bei der Zuweisung
char* zkette = "abrakadabra";
die \0 automatisch angehängt wird? Musste man das bei C noch selber machen?
nein, wenn du eine Stringkonstante im Quelltext stehen hast, wird dieser String auch vom Compiler schon mit einem Nullbyte versehen.
Aber Achtung!
Fall 1: char *s1 = "hallo";
Fall 2: char s2[4] = "hi";
Fall 3: char s3[4] = "hiho";
Im Fall 1 wird der String "hallo" mit einem abschließenden Nullbyte irgendwo (das "wo" soll uns nicht interessieren) im Arbeitsspeicher abgelegt, also die Bytesequenz 68 61 6C 6C 6F 00. Und der Zeiger s1 verweist auf diesen Speicherbereich.
Im zweiten Beispiel wird ein 4 Byte langes char-Array angelegt und mit der Bytesequenz 68 69 00 00 initialisiert - das Nullbyte ist also auch hier automatisch mit dran.
Im Fall 3 wird schließlich auch ein char-Array mit einer festen Länge von 4 Elementen angelegt, das aber keinen Platz mehr für die abschließende Null hat. Hieraus resultiert eine Bytesequenz 68 69 68 6F, die keinen ordentlichen String-Abschluss hat. Würde man das als String interpretieren, ist sowohl die Länge als auch der Inhalt ab dem fünften Zeichen fraglich.
Jetzt hast Du mich wirklich auf dem linken Fuß erwischt.
Dann steig doch wieder auf den anderen um! ;-)
So long,
Martin
PCMCIA: People Can't Memorize Computer Industry Acronyms