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(); }
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!