
Envoyé par
camboui
Sinon je ne suis pas d'accord.
Le caractère zéro qui se trouve à la fin d'une chaine de caractère (en C ou C++) fait partie de la chaine.
Non. La preuve :
char test_null[6] = "abc\0d\0" ;
Essaie de trouver un strlen valant 6 avec cette chaîne... 
Le caractère zéro est terminal : tu peux si tu veux le considérer comme faisant partie de la chaîne ou non, ça n'a que peu d'importance réelle. Tout ce qui suit le caractère nul est purement et simplement ignoré.
En fait, tu confonds "tableau de char" (pouvant contenir un nombre indéfini de caractères nuls, vu que l'on en connait à l'avance la longueur) avec une "chaîne de caractères", qui par nature même s'arrête au premier caractère nul rencontré.
Or, sizeof opère sur la taille de l'élément : il renverra 6 pour mon exemple test_null, par exemple. Mais un strlen appliqué à cette même variable renverra 3... Parce que la première fonction considère la taille réelle de l'élément, alors que la seconde l'interprète comme une chaîne de caractère et s'arrête au premier zéro.
Si tu ne veux pas être gêné par les caractères nuls, ce n'est pas std::string qu'il te faut utiliser, mais un std::vector<char>.
Partager