Navigation des conversions stringstream, string et char*
Lorsqu'ils travaillent avec des chaînes en C, les programmeurs rencontrent souvent une confusion lors de la conversion entre stringstream, string , et char*. Cet article explore les subtilités de ces conversions, démêle les idées fausses et propose des solutions pratiques.
Comprendre la durée de vie de stringstream.str().c_str()
Le point crucial Le problème réside dans la compréhension de la durée de vie de la chaîne renvoyée par stringstream.str().c_str(). Cet objet chaîne temporaire est détruit à la fin de l'expression, rendant invalides tous les pointeurs obtenus (comme const char* cstr2).
Résoudre la confusion
Pour résolvez ce problème, évitez d'attribuer stringstream.str().c_str() directement à un const char*. Au lieu de cela, créez une copie de la chaîne temporaire dans un autre objet chaîne, puis obtenez la chaîne C à partir de celui-ci :
const std::string tmp = stringstream.str(); const char* cstr = tmp.c_str();
Vous pouvez également limiter la durée de vie de la chaîne temporaire en l'utilisant dans l'expression :
use_c_str( stringstream.str().c_str() );
Pour plus d'efficacité et de clarté, liez le temporaire à une référence const :
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
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!