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?
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?
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.
'Quindi, l'array a contiene 5 elementi.' Vuoi dire elementi '4'? –
@BikalGurung: No, 5 è corretto. {'a', 'b', 'c', '\ 0', '\ 0'} –
Non c'è assolutamente niente di sbagliato con l'inglese nella tua domanda. Ma non potresti trovare la risposta semplicemente provandola? – Barmar
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. –
In alternativa, potresti scrivere 'char a [4] =" abc \ 0 ";'. – nwellnhof