C++ 地址相同,但内容不同

C++ 地址相同,但内容不同,c++,string,pointers,constants,C++,String,Pointers,Constants,我使用stringstream获取文本文件的内容(实际上,它是一个着色器代码源),以便将其传递给一个接受常量char*const*(glShaderSource)的函数。起初,我是这样做的 std::stringstream buffer; buffer << input.rdbuf(); char const *code = buffer.str().c_str(); glShaderSource(id, 1, &code, 0); std::stringstream缓

我使用stringstream获取文本文件的内容(实际上,它是一个着色器代码源),以便将其传递给一个接受常量char*const*(glShaderSource)的函数。起初,我是这样做的

std::stringstream buffer;
buffer << input.rdbuf();

char const *code = buffer.str().c_str();
glShaderSource(id, 1, &code, 0);
std::stringstream缓冲区;

buffer我发现了问题:std::stringstream返回的字符串是临时的,只有在表达式结束时才有效

要扩展buffer.str()的有效期,可以在对象上创建引用。该值的预期寿命将延长到参考值之一

以下代码起作用:

std::string const &string = buffer.str();
char const *code = string.c_str();
glShaderSource(id, 1, &code, 0);

你能详细说明有趣/意外的问题吗?不能重复:不要把答案放在问题中,将其作为答案发布。dreamlax发布了一个正确的答案,但由于某种原因被删除了。。
void workaround(char const *code) {
    printf("Code*: %p\n", code);
    printf("Code: %s\n", code);
}

-------------------------------------

std::stringstream buffer;
buffer << input.rdbuf();

workaround(buffer.str().c_str());

printf("Buff*: %p\n", buffer.str().c_str());
printf("Buff: %s\n", buffer.str().c_str());
std::string const &string = buffer.str();
char const *code = string.c_str();
glShaderSource(id, 1, &code, 0);