2

为什么在这段代码中读出 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);
}

输出:

文本1:v = 5,a = 0xbfcfd508

文本 1:v = 1.5,a = 0xbfcfd508

文本 2:v = 1.5,a = 0xbfcfd510

4

1 回答 1

8

计算完str().c_str()表达式后,调用创建的临时std::string实例str()被释放,char指针指向 Nirvana。您需要存储的返回值str()

于 2012-04-25T12:51:01.927 回答