C łańcuchy są zakończone znakiem zerowym. Na końcu tego ciągu znajduje się zero bajtów. Zakładając ASCII, "Bill"
wygląda to w pamięci:
'B' 'i' 'l' 'l' '\0'
0x42 0x69 0x6c 0x6c 0x00
od standardowej C sekcja 6.4.5 napisowych ustęp 7:
W fazie translacji 7 bajt lub kod wartość zero jest dołączana do każdej sekwencji znaków wielobajtowych, która wynika z literału lub literałów ciągu.
Jeśli chcesz otrzymać odpowiedź 4
dla długości, należy użyć strlen("Bill")
zamiast sizeof
.
Jeśli naprawdę nie chcesz zerować terminator, to też możliwe, choć prawdopodobnie nierozsądne. Ta definicja:
char bill[4] = "Bill";
przyniesie tablicy 4-bajtowy bill
zawierający tylko znaków 'B'
, 'i'
, 'l'
i 'l'
, nie zerowym terminator.
@ H2CO3 - Zgadzam się - to proste programowanie C, który jest zwykle pokrywane w ramach kilku pierwszych rozdziałów rozsądnym książki programowania w C (lub C++) –
To nie jest powód, aby nie używać tego pytania jako miejsca do napisania dobrej kanonicznej odpowiedzi i mam nadzieję, że poprawi trochę internet. –
@EdHeal Być może wynik głosowania na zamknięcie byłby dobrym znakiem, z którym się zgadzasz;) Całkowicie się zgadzam, to pytanie bardzo dobrze pasuje do terminu "nie pokazuje żadnego wysiłku badawczego" w FAQ. –