C, ist die Länge eines Strings nur die Anzahl an chars oder auch mit \0?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

die funktion zählt das 0 Byte nicht mit. eine speicherrefernz an der ein 0-byte steht ergibt dann eben auch ein strlen = 0 und nicht 1.

nichts desto trotz ist natürlich ein Byte mehr gespeichert als strlen ausgibt.

MaxChemieNoob 
Fragesteller
 29.09.2019, 17:53

Perfekt, danke :D

0

Die Länge ist immer exklusiv des Endmarkers - \0 wird also nciht mitgezählt.

Im Prinzip steht das aber auch alles in der Dokumentation und liest sich dann beispielhaft so:

The strlen() function calculates the length of the string pointed to by s, excluding the terminating null byte ('\0').

Ja, es sind dann 6 (char) Bytes im Arbeitsspeicher.

Speicherst du den String allerdings in eine Datei, die nur diesen String beinhaltet, dann kommt noch das Zeichen "EOF" (End Of File) mit einem zusätzlichen Byte (7 char Bytes insgesamt) dazu.

Woher ich das weiß:Recherche
dasVollidiot  29.09.2019, 19:52

Muss noch etwas ergänzen. Ich habe das jetzt noch einmal recherchiert und zu dem Fall mit der Datei: Es ist NICHT standardmäßig so, im Gegensatz, wie ich es vorhin geschrieben habe, dass der Nullzeiger (dir besser bekannt als das Zeichen \0) mit in eine Datei geschrieben wird. Das ist stark systemabhängig und auch davon ob du es als Charakter also als Zeichenwert ODER direkten Binärcode speicherst. Es ist eher also seltener, bis fast gar nicht der Fall. Siehe also bitte meine 2. Antwort mit der Speicherung dieses Zeichens in einer Datei als falsch an. Es ergeben sich dann also für das gegebene Beispiel 6 Bytes, da zwar das \0-Zeichen wegfällt, aber das EOF-Zeichen bleibt.

0