"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Le `string::c_str()` de C++ 11 est-il toujours terminé par un caractère nul ?

Le `string::c_str()` de C++ 11 est-il toujours terminé par un caractère nul ?

Publié le 2024-11-07
Parcourir:778

Is C  11\'s `string::c_str()` Still Null-Terminated?

Le string::c_str() de C 11 élimine-t-il la terminaison nulle ?

Dans 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

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 l'implémentation :

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()

Notes supplémentaires :

  • &operator[](0) peut être utilisé comme synonyme de c_str().
  • Le caractère nul de fin doit se trouver dans le même tampon que les données de la chaîne, car *(p size()) doit être égal à charT(). Ainsi, même si le caractère nul est initialisé paresseusement, il n'est pas possible d'observer le tampon dans un état intermédiaire.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3