2013-02-16 9 views
24
#include <stdio.h> 

int main(int argc, char *argv[]) { 
    char s[]="help"; 
    printf("%d",strlen(s)); 
} 

Warum der obige Ausgang ist 4, ist das nicht 5 ist die richtige Antwort?ist das Zeichen Nullabschluss in der Länge

es sollte 'h', 'e', ​​'l', 'p', '\ 0' in Erinnerung sein ..

Dank.

+4

Wenn Sie 'verwendet sizeof (n)/sizeof (char)' Sie würde die Antwort bekommen Sie erwarten. –

+3

@WaleedKhan: True - wenn der Code wie oben geschrieben wird. Leider werden scheinbar triviale Änderungen (z. B. "char * s =" help ";") das durchbrechen, also musst du ziemlich vorsichtig damit umgehen. Solange wir dabei sind, ist 'sizeof (char)' immer 1, also wäre 'sizeof (s)' für den Code in Ordnung, wie er gerade ist. –

+2

War die Dokumentation zu diesem Thema unklar? –

Antwort

33

strlen: Gibt die Länge der angegebenen Byte-Zeichenfolge zurück, die null Terminator nicht enthält;

char s[]="help"; 
strlen(s) should return 4. 

sizeof: Gibt die Länge des angegebenen Byte-String, enthalten Nullabschluss;

char s[]="help"; 
sizeof(s) should return 5. 
+0

Kommentare sind falsch. 'sizeof' gibt 5 zurück: http://pastebin.com/94AbKunk – daaku

4

strlen zählt die Elemente, bis sie das Nullzeichen erreichen. In diesem Fall hört sie auf zu zählen. Es wird es nicht mit der Länge enthalten.

2

Es ist 4.

strlen() zählt die Anzahl der Zeichen bis zu, aber nicht einschließlich, das erste Zeichen mit einem Wert von 0 - der nul Terminator.

4

strlen() die Anzahl der Zeichen in dem Array nicht (in der Tat zählen, könnte dies nicht einmal erkennbar sein (wenn Sie nur einen Zeiger auf den Speicher, anstelle eines Arrays). Er tut, wie Sie herausgefunden haben, zählen einschließlich der Anzahl von Zeichen bis zu, aber nicht die Null-Zeichen. Betrachten char s[] = {'h','i','\0','t','h','e','r','e'};

2

strlen(const char* ptr) die Länge der Zeichenfolge zurückgibt, indem sie die nicht-Null-Elemente zählen zu beginnen, bis Null erreicht. zählen '\0' ist also nicht

Ich empfehle, dass Sie das Referat konsultieren nce wie link für Fragen wie diese.

Es ist klar gesagt wie:

A C string is as long as the number of characters between the beginning 
of the string and the terminating null character (without including the 
terminating null character itself). 
Verwandte Themen