2013-07-30 10 views
31

Ad esempio:I valori letterali stringa che terminano con un terminatore null contengono un terminatore null aggiuntivo?

char a[] = "abc\0"; 

Fa C standard dire che un altro byte di valore 0 deve essere aggiunto anche se la stringa ha già uno zero alla fine? Quindi, è sizeof(a) uguale a 4 o 5?

+1

Non c'è assolutamente niente di sbagliato con l'inglese nella tua domanda. Ma non potresti trovare la risposta semplicemente provandola? – Barmar

+2

Se vuoi essere esplicito, puoi scrivere: 'char a [] = {'a', 'b', 'c', '\ 0'};'. Questo non è dichiarato come stringa letterale quindi non viene aggiunto un nullo di terminazione aggiuntivo. –

+0

In alternativa, potresti scrivere 'char a [4] =" abc \ 0 ";'. – nwellnhof

risposta

50

Tutti i valori letterali stringa hanno un terminatore nullo implicito, indipendentemente dal contenuto della stringa.

Lo standard (6.4.5 letterali di stringa) dice:

Un byte o un codice di valore zero è allegato a ciascuna sequenza di caratteri multibyte che deriva da una stringa letterale o letterali.

Quindi, la stringa letterale "abc\0" contiene il terminatore nullo implicito, oltre a quello esplicito. Quindi, l'array a contiene 5 elementi.

+0

'Quindi, l'array a contiene 5 elementi.' Vuoi dire elementi '4'? –

+10

@BikalGurung: No, 5 è corretto. {'a', 'b', 'c', '\ 0', '\ 0'} –

Problemi correlati