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[] = "abc
char 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.
InformationsquelleAutor xiaokaoy | 2013-07-30