Faire des littéraux de chaîne qui se termine avec un null-terminator contiennent un supplément de null-terminator?
Par exemple:
char a[] = "abcchar a[] = "abc\0";
";
Ne la norme C dire que l'autre octet de valeur 0
doit être annexé même si la chaîne a déjà un zéro à la fin? Alors, est - sizeof(a)
égal à 4 ou 5?
- Il n'y a absolument rien de mal avec l'anglais dans votre question. Mais ne pourriez-vous pas trouver la réponse en essayant simplement il?
- Si vous voulez être explicite, vous pourriez écrire:
char a[] = {'a','b','c','\0'};
. Ce n'est pas déclarée comme une chaîne littérale, donc un supplément de valeur null n'est pas ajouté. - Alternativement, vous pouvez écrire
char a[4] = "abc\0";
. - Ce dernier peut paraître un peu de mal parce que la norme dit un '\0' est ajouté rendre le littéral de chaîne de 5 caractères de taille et de ce qui semble trop grand pour un 4-tableau de char. Toutefois, dans le cas d'un initialiseur est trop grand pour un tableau de taille fixe l'excédent éléments sont tout simplement ignorés et non utilisé pour l'initialisation (§6.7.8 paragraphe 14) qui est OK dans ce cas, mais je voudrais éviter de l'écrire comme ça.
Vous devez vous connecter pour publier un commentaire.
Tous les littéraux de chaîne ont un implicite null-terminator, quel que soit le contenu de la chaîne.
La norme (6.4.5 les Littéraux de Chaîne) dit:
Ainsi, la chaîne de caractères littérale
"abc\0"
contient implicitement l'null-terminator, en plus de l'explicite. Ainsi, le tableaua
contient 5 éléments.4
éléments?