Maison > développement back-end > C++ > Pourquoi l'attribution de stringstream::str().c_str() à un const char* entraîne-t-elle une erreur d'exécution ?

Pourquoi l'attribution de stringstream::str().c_str() à un const char* entraîne-t-elle une erreur d'exécution ?

Patricia Arquette
Libérer: 2024-11-16 04:46:06
original
914 Les gens l'ont consulté

Why does assigning stringstream::str().c_str() to a const char* result in a runtime error?

Confusion de conversion : comprendre le comportement de stringstream, string et char*

Le dilemme autour de la conversion stringstream, string et char* découle de la nature transitoire de la chaîne renvoyée par stringstream.str().c_str(). Cette chaîne temporaire, n'existant que pendant la durée de vie de l'expression, est susceptible d'être supprimée une fois l'instruction terminée.

Comme le démontre l'extrait de code fourni, l'attribution de la chaîne temporaire à un caractère const* entraîne une erreur d'exécution, car le pointeur fait référence à la mémoire qui a été libérée. La sortie inutile qui en résulte est une manifestation de cette erreur de référencement de mémoire.

Pour éviter ce problème, vous pouvez soit copier la chaîne temporaire vers un emplacement plus permanent, tel qu'un autre objet chaîne, avant d'obtenir la représentation sous forme de chaîne C. Alternativement, la durée de vie de la chaîne temporaire peut être prolongée en la liant à une référence const, comme indiqué ci-dessous :

{
  const std::string& tmp = stringstream.str();
  const char* cstr = tmp.c_str();
}
Copier après la connexion

Cette approche garantit que la chaîne reste accessible tout au long de la portée de la référence.

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