Maison >développement back-end >C++ >Est-ce que `c_str()` en C 11 est toujours garanti de renvoyer une chaîne terminée par un caractère nul ?
c_str() et chaînes à terminaison nulle en C 11
En C 11, la définition de basic_string::c_str() soulève un question : produit-il toujours une chaîne terminée par un caractère nul ?
Le problème
En C 11, basic_string::c_str est défini pour s'aligner avec basic_string::data, qui à son tour s'aligne sur (begin() n) et (&*begin() n). Il n'y a aucune exigence explicite pour un caractère nul à la fin de la chaîne.
La réponse
Malgré le manque de définition explicite, les chaînes en C 11 sont nécessaires pour utilisez des tampons terminés par un caractère nul en interne. Ceci est évident dans la définition de Operator[]:
"Returns: *(begin() pos) if pos < size(), sinon une référence à un objet de type T avec la valeur charT(); la valeur référencée ne doit pas être modifiée. >
Considérations supplémentaires
L'exigence de valeur de retour pour Operator[] implique que vous pouvez utiliser &operator[](0) pour récupérer c_str(). Cela signifie que le caractère nul de fin doit résider dans le même tampon. Par conséquent, même si le terminateur est initialisé paresseusement, il ne peut pas être observé dans un état intermédiaire.
Conclusion
Contrairement aux hypothèses initiales, c_str() en C 11 est toujours garanti de produire une chaîne terminée par un caractère nul, garantissant la compatibilité avec le code existant et permettant un accès efficace aux caractères.
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!