Maison > Article > développement back-end > La `string::c_str()` de C 11 est-elle toujours terminée par un caractère nul ?
Le string::c_str() de C 11 élimine-t-il la terminaison nulle ?
En C 11, string::c_str n'est plus garanti produire une chaîne terminée par un caractère nul.
Raison :
En C 11, string::c_str est défini comme identique à string::data, qui à son tour est défini comme équivalent à *(begin() n) pour 0 <= n < taille(). La norme n'exige pas explicitement que la chaîne ait un caractère nul à sa fin.
Conséquences :
Cela implique que string::c_str() ne peut plus renvoyer une chaîne terminée par un caractère nul, entraînant des erreurs potentielles dans les scénarios qui supposent une telle terminaison.
Solution :
La solution consiste à utiliser string::c_str() uniquement pour compatibilité avec le code existant. Pour le nouveau code, utilisez plutôt string::data(). Bien que string::data() ne renvoie pas de chaîne terminée par un caractère nul, il renvoie un pointeur vers le tampon sous-jacent, dont la terminaison est garantie par un caractère nul en interne.
Détails de la mise en œuvre :
En interne, les chaînes doivent désormais utiliser des tampons terminés par un caractère nul. La définition de l'opérateur [] dans la section 21.4.5 nécessite que pour size() <= pos, l'opérateur renvoie une référence à un charT() avec la valeur ' ', appliquant ainsi les tampons terminés par un caractère nul.
Remarques supplémentaires :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!