9
votes

C ++: taille d'un tableau de caractères en utilisant Taillef

Regardez la pièce de code suivante en C ++: xxx

si Tailleof (char) est de 1 octet, pourquoi la sortie montre-t-elle Taillef ( A2) comme 4 et non 3 (comme dans le cas de A1 )?


1 commentaires

+1 Juger des réponses (et mon expérience avec les programmeurs junior), il s'agit d'une question qui provoque beaucoup de confusion et entraîne de nombreux insectes subtils pouvant être difficiles à trouver.


3 Réponses :


21
votes

c Strings contient un terminateur null, ajoutant ainsi un caractère.

essentiellement ceci: xxx


1 commentaires

J'aime cette réponse pour sa déclaration d'équivalence d'initialisation, mais elle a plus de sens pour moi de parler de A2, non A1 - l'init vous citez ici est ce que vous avez Obtenez en rembourrant la c-string dans A2 .



0
votes

pour A2, il s'agit d'une chaîne de sorte qu'il contient également le '\ n'

Correction, après le commentaire Ethan et Adam, ce n'est pas "\ n" bien sûr, mais Null Terminator qui est "\ 0 '


4 commentaires

Il n'y a pas de \ n (linefeed) à la fin de A2 . Il y a un caractère NULL ( \ 0 ) à la fin d'une chaîne. Honte sur toi, upvoter.


-1: faux, A2 ne contient pas '\ n' à la fin mais plutôt '\ 0' .


désolé vous avez raison, je voulais dire le terminateur null '\ 0' merci pour la correction


@miks Adam a commenté devant moi. Cependant, j'ai supprimé le bowvote après votre correction :)



2
votes

C'est parce qu'il y a un caractère supplémentaire '\ 0' ajouté à la fin de la chaîne C, alors que la première variable, A1 est une matrice de trois séparées caractères.

Tailleof vous indiquera la taille d'octets d'une variable, mais préférez strlen si vous souhaitez la longueur d'une chaîne C au moment de l'exécution.


0 commentaires