Le stringhe C terminano con null. C'è un byte zero alla fine di quella stringa. Supponendo ASCII, "Bill"
assomiglia a questo in memoria:
'B' 'i' 'l' 'l' '\0'
0x42 0x69 0x6c 0x6c 0x00
Dalla serie C, sezione 6.4.5 stringhe letterali, del paragrafo 7:
In fase di traduzione 7, un byte o un codice di il valore zero viene aggiunto a ogni sequenza di caratteri multibyte risultante da una stringa letterale o letterale.
Se si desidera ottenere una risposta del 4
per la lunghezza, è necessario utilizzare strlen("Bill")
, piuttosto che sizeof
.
Se davvero non si desidera il terminatore null, è anche possibile, anche se probabilmente mal consigliato. Questa definizione:
char bill[4] = "Bill";
darà un array di 4 byte bill
contenente solo i caratteri 'B'
, 'i'
, 'l'
, e 'l'
, senza nullo-terminatore.
fonte
2013-06-03 21:08:56
@ H2CO3 - Sono d'accordo - questo è semplice programmazione C che di solito è coperto entro il primo paio di capitoli di un libro di programmazione ragionevole C (o C++) –
Non c'è motivo per non usare questa domanda come luogo per scrivere una buona risposta canonica e, si spera, migliorare un po 'internet. –
@EdHeal Forse una votazione per la chiusura sarebbe un buon segno del tuo consenso;) Sono assolutamente d'accordo, questa domanda si adatta molto bene al termine "non mostra sforzi di ricerca" nelle FAQ. –