Navigating stringstream, string, and char* Conversions
When working with strings in C , programmers often encounter confusion when converting between stringstream, string, and char*. This article delves into the intricacies of these conversions, unravelling misconceptions and providing practical solutions.
Understanding the Lifetime of stringstream.str().c_str()
The crux of the issue lies in understanding the lifetime of the string returned by stringstream.str().c_str(). This temporary string object is destroyed at the end of the expression, rendering any pointers obtained from it (like const char* cstr2) invalid.
Resolving the Confusion
To resolve this issue, avoid assigning stringstream.str().c_str() directly to a const char*. Instead, create a copy of the temporary string in another string object and then obtain the C string from that:
const std::string tmp = stringstream.str(); const char* cstr = tmp.c_str();
Alternatively, confine the temporary string's lifetime by using it within the expression:
use_c_str( stringstream.str().c_str() );
For efficiency and clarity, bind the temporary to a const reference:
{ const std::string& tmp = stringstream.str(); const char* cstr = tmp.c_str(); }
The above is the detailed content of How to Safely Convert Between stringstream, string, and char* in C ?. For more information, please follow other related articles on the PHP Chinese website!