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 :
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