Null-Charakter (\0)
Damit der Computer weiß, wo ein String aufhört, gibt C immer am Ende eines Strings einen Null-Charakter hinzu.
Beispiel
Wir haben die folgende Variable:
char hello[5] = "HELLO";
Lassen wir uns mal visualisieren wo die Variable gerade in unserem Arbeitsspeicher liegt:
| 1 | 2 | 3 | 4 | 5 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | 15 | 9 | ‘H’ | ‘E’ | ‘L’ | ‘L’ | ‘O’ | 63 | 176 | 180 | ‘\0’ |
Jetzt geben wir die Variable aus:
printf("%s", hello);
Hier ist das Ergebnis:
HELLO?░┤
Was ist hier geschehen?
Da wir unseren String nur 5 Bytes gegen haben, hat die Variable keinen Platz für den Null-Charakter ('\0') gehabt. Das Endergebnis ist, dass der Computer bis zu einem Null-Charakter weiter ausgegeben hat, und dabei Zahlen als Charakteren ausgegeben hat.
Deshalb solltet man dem Deklarieren eines Strings immer die gedachte Größe + 1 reinschreiben.
Ausbesserung
Jetzt lassen wir unserer Variable 6 Bytes zu:
char hello[6] = "HELLO"; // => HELLO\0
Visualisiert sieht es so aus:
| 1 | 2 | 3 | 4 | 5 | 6 | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 32 | 15 | 9 | ‘H’ | ‘E’ | ‘L’ | ‘L’ | ‘O’ | ‘\0’ | 176 | 180 | ‘\0’ |
Jetzt haben wir genug Platz für den Null-Charakter, und es kann richtig ausgegeben werden:
HELLO