为什么在这段代码中读出y之后text1的值会发生变化?
void func()
{
int value1 = 5;
double value2 = 1.5;
std::ostringstream x, y;
x << value1;
y << value2;
const char *text1 = x.str().c_str();
fprintf(stderr, "text1: v=%s, p=%p\n", text1, &text1);
const char *text2 = y.str().c_str();
fprintf(stderr, "text1: v=%s, p=%p\ntext2: v=%s, p=%p\n", text1, &text1, text2, &text2);
}
Run Code Online (Sandbox Code Playgroud)
输出:
text1:v = 5,a = 0xbfcfd508
text1:v = 1.5,a = 0xbfcfd508
text2:v = 1.5,a = 0xbfcfd510
在评估str().c_str()表达式之后,将释放std::string由调用创建的临时实例,str()并且char指针指向Nirvana.你需要存储返回值str()!
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |