Where does the pointer returned by calling string::c_str() point to ? In the following code snippet, I thought I will give get a segmentation fault but it gives me the correct output. If the pointer returned by string::c_str() points to an internal location inside the string object, then when the function returns and the object destructor gets invoked, I should get an invalid memory access.
#include <iostream>
#include <string>
using namespace std;
const char* func()
{
string str("test");
return str.c_str();
}
int main()
{
const char* p = func();
cout << p << endl;
return 0;
}
Output: test
Compiler: g++ 4.3.3
Platform: ubuntu 2.6.28-19
It points to some place in memory where a null-terminated string containing the contents of the
std::stringis located.The pointer is only valid until the
std::stringis modified or destroyed. It is also potentially invalidated if you callc_str()ordata()again.Basically, your safest bet is to assume the pointer obtained from
c_str()is invalidated the next time you do something to thestd::stringobject.No, you get undefined behavior. You might get a memory access error of some kind (like a segmentation fault), but your program also might appear to continue running correctly. It might appear to work one time you run your program but fail the next.