Maison > développement back-end > C++ > le corps du texte

L'utilisation de `std::string::c_str()` avec une chaîne temporaire est-elle sécurisée en C ?

Mary-Kate Olsen
Libérer: 2024-11-13 14:09:02
original
873 Les gens l'ont consulté

Is Using `std::string::c_str()` with a Temporary String Safe in C  ?

Préserver l'intégrité des chaînes temporaires : explorer std::string::c_str()

Dans le domaine du C , la sécurité et la validité du code impliquant des chaînes temporaires soulève souvent des inquiétudes. L'une de ces questions concerne l'utilisation de std::string::c_str() dans le contexte de chaînes temporaires.

La question :

Considérez l'extrait de code suivant :

void consumer(char const* p)
{
  std::printf("'%s'", p);
}

std::string random_string_generator();

consumer(random_string_generator().c_str());
Copier après la connexion

Le dilemme vient de la destruction potentielle de l'objet temporaire std::string après avoir récupéré son c_str() pointeur. Cela pose-t-il un problème de validité selon la norme C ?

La réponse :

Comprendre la durée de vie des temporaires est crucial. En C , les temporaires sont détruits à la fin de l'expression complète, pas immédiatement après leur création ni avant leur utilisation. Par conséquent, dans le code donné, l'objet temporaire std::string persistera jusqu'à la conclusion de l'appel de fonction à consumer().

Le pointeur obtenu via std::string::c_str() reste valide jusqu'à toute opération non const est effectuée sur l'objet chaîne ou il est détruit. Puisque l'objet chaîne est temporaire et détruit à la fin de l'expression complète, le code est effectivement bien formé et valide.

Note de bas de page historique :

Il est important de notez que le comportement décrit ci-dessus est devenu standardisé avec C 98. Avant cela, la durée de vie des temporaires variait en fonction de l'implémentation du compilateur. Cependant, à mesure que la norme a évolué, le comportement a été défini de manière uniforme, garantissant ainsi la cohérence entre les compilateurs.

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!

source:php.cn
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