En C++11, nous savons que std::string
est garantie d'être à la fois contiguë et à terminaison nulle (ou, de façon plus pédante, terminée par charT()
qui, dans le cas de char
est le caractère nul 0).
Il existe une API en C que je dois utiliser pour remplir une chaîne de caractères par pointeur. Elle écrit la chaîne entière + le terminateur nul. En C++03, j'ai toujours été obligé d'utiliser une balise vector<char>
parce que je ne pouvais pas supposer que string
était contiguë ou à terminaison nulle. Mais en C++11 (en supposant qu'un fichier basic_string
qui est encore douteuse dans certaines bibliothèques standard), je peux le faire.
Ou puis-je le faire ? Quand je fais ça :
std::string str(length);
La chaîne allouera length+1
octets, le dernier étant rempli par le terminateur nul. C'est bien. Mais quand je passe ça à l'API C, il va écrire length+1
des personnages. Ça va écraser le terminateur nul.
Certes, il va écraser le null-terminator avec un caractère nul . Il y a de bonnes chances que cela fonctionne (en effet, je ne peux pas imaginer comment il ne pouvait pas travail).
Mais je ne me soucie pas de ce qui "marche". Je veux savoir, selon la spécification si l'on peut remplacer le caractère nul par un caractère nul ?