web-dev-qa-db-fra.com

Les littéraux de chaîne qui se terminent par un terminateur nul contiennent-ils un terminateur nul supplémentaire?

Par exemple:

char a[] = "abc\0";

La norme C indique-t-elle qu'un autre octet de valeur 0 Doit être ajouté même si la chaîne a déjà un zéro à la fin? Alors, sizeof(a) est-il égal à 4 ou 5?

44
xiaokaoy

Tous les littéraux de chaîne ont un terminateur nul implicite, quel que soit le contenu de la chaîne.

Le standard (6.4.5 String Literals) dit:

Un octet ou un code de valeur zéro est ajouté à chaque séquence de caractères multi-octets qui résulte d'un ou plusieurs littéraux de chaîne.

Ainsi, la chaîne littérale "abc\0" contient le terminateur nul implicite, en plus de celui explicite. Ainsi, le tableau a contient 5 éléments.

68
David Heffernan