C-Strings sind nullterminiert. Am Ende dieser Zeichenfolge befindet sich ein Nullbyte. Unter der Annahme, ASCII, sieht "Bill"
wie dies in Erinnerung:
'B' 'i' 'l' 'l' '\0'
0x42 0x69 0x6c 0x6c 0x00
Von dem C-Standard, Abschnitt 6.4.5 Stringliterale Absatz 7:
In Übersetzungsphase 7, einen Byte oder Code Der Wert Null wird an jede Multibyte-Zeichenfolge angehängt, die sich aus einem String-Literal oder Literalen ergibt.
Wenn Sie eine Antwort von 4
für die Länge erhalten möchten, sollten Sie strlen("Bill")
verwenden, anstatt sizeof
.
Wenn Sie wirklich den Null-Terminator nicht wollen, ist das auch möglich, obwohl wahrscheinlich nicht ratsam. Diese Definition:
char bill[4] = "Bill";
wird bill
enthält 'B'
, nur die Zeichen ohne Null-Terminator 'i'
, 'l'
und 'l'
, ein 4-Byte-Array ergeben.
@ H2CO3 - Ich schließe mich - das ist einfach C-Programmierung, die in der Regel innerhalb der ersten paar Kapitel eines vernünftigen Programmierung Buch über C (oder C bedeckt ++) –
Das ist kein Grund, diese Frage nicht als Ort zu verwenden, um eine gute kanonische Antwort zu schreiben und hoffentlich das Internet ein wenig zu verbessern. –
@EdHeal Vielleicht wäre ein Votum für die Schließung ein gutes Zeichen für Ihre Zustimmung;) Ich stimme völlig zu, diese Frage passt sehr gut zu dem Begriff "keine Forschungsanstrengungen" in den FAQ. –