Maison > développement back-end > C++ > Le `string::c_str()` de C 11 garantit-il toujours une chaîne à terminaison nulle ?

Le `string::c_str()` de C 11 garantit-il toujours une chaîne à terminaison nulle ?

Mary-Kate Olsen
Libérer: 2024-10-27 15:35:02
original
512 Les gens l'ont consulté

 Does C  11's `string::c_str()` Still Guarantee a Null-Terminated String?

La fonction string::c_str() de C 11 n'est-elle plus terminée par un caractère nul ?

En C, la classe basic_string fournit diverses méthodes pour accéder à ses personnages. L'une de ces méthodes, c_str(), est une source de confusion depuis C 11. Avant C 11, c_str() était chargée de renvoyer un tableau de caractères terminé par un caractère nul représentant le contenu de la chaîne.

Cependant, en C 11, la définition de basic_string::c_str() a changé. Il est maintenant défini comme étant identique à basic_string::data, qui à son tour renvoie un pointeur vers le début du tampon de caractères interne de la chaîne. Cela a soulevé une question : ce changement implique-t-il que c_str() ne garantit plus une chaîne terminée par un caractère nul ?

La réponse : les chaînes nécessitent des tampons terminés par un caractère nul en interne

La réponse à cette question est non. Malgré les changements apportés à C 11, les chaînes doivent toujours utiliser des tampons terminés par un caractère nul en interne. Cela ressort clairement de la définition de la méthode Operator[] (21.4.5) dans le standard C :

Requires: pos <= size().
Returns: *(begin()+pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified.
Copier après la connexion

c_str() est défini en termes d'opérateur[] :

Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
Copier après la connexion

Étant donné que c_str() et data doivent tous deux être des opérations O(1), l'implémentation est effectivement obligée d'utiliser des tampons terminés par un caractère nul. De plus, l'exigence de valeur de retour pour Operator[] garantit que c_str() renvoie un pointeur vers un tampon terminé par un caractère nul. Par conséquent, c_str() continue de fournir une chaîne terminée par un caractère nul, malgré les modifications apportées à C 11.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal