C++: la taille d'un char tableau à l'aide de sizeof
Regardez la partie suivante de code en C++:
char a1[] = {'a','b','c'};
char a2[] = "abc";
cout << sizeof(a1) << endl << sizeof(a2) << endl;
Si sizeof(char)
est de 1 octet, pourquoi la sortie de montrer sizeof(a2)
4 et pas 3 (comme dans le cas de a1
)?
- +1, à en Juger par les réponses (et mon expérience avec les programmeurs juniors), c'est une question qui provoque beaucoup de confusion et de résultats dans de nombreux bogues subtils qui peuvent être difficiles à trouver.
Vous devez vous connecter pour publier un commentaire.
C-strings contenir un terminateur null, ajoutant ainsi un caractère.
En substance ceci:
a2,
pasa1
- init-vous citer ici ce que vous obtenez par la farce de la C-String ena2
.C'est parce qu'il y a un supplément de nulle
'\0'
caractère ajoutée à la fin de la C-string, alors que la première variable,a1
est un tableau de trois séparée caractères.sizeof
vais vous dire la taille en octets d'une variable, mais je préfèrestrlen
si vous voulez que la longueur d'un C-string au moment de l'exécution.Pour a2, c'est une chaîne donc il contient également le '\n'
De Correction, d'après Ethan & Adam de commentaire, ce n'est pas '\n', bien sûr, mais terminateur null qui est '\0'
\n
(saut de ligne) à la fin dea2
. Il y a une valeur null (\0
) de caractères à la fin d'une chaîne. Honte sur vous, upvoter.a2
ne contient pas de'\n'
à la fin, mais plutôt'\0'
.