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 ?

Est-ce que `c_str()` en C 11 est toujours garanti de renvoyer une chaîne terminée par un caractère nul ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 09:22:02331parcourir

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn