字符串流空出来

时间:2015-09-12 20:16:35

标签: c++ string integer append stringstream

我一直试图在字符串中附加一个整数,我在这里尝试了几种解决方案,包括:

std::stringstream ss;

ss << gvHours << "\'" << gvMinutes << "\"" << gvSeconds << ":" << gvTicks;

std::string output(ss.str());
return output.c_str();

std::stringstream ss;
std::string output = "";

ss << gvHours << "\'" << gvMinutes << "\"" << gvSeconds << ":" << gvTicks;

output = ss.str();
return output.c_str();

第一个给了我一个空字符串,第二个给了我一个不可读的字符,Notepad ++在黑框中显示为“SOH”。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:4)

是的,这部分

return output.c_str();

坏了。

c_str()获取std::string时,您只是获得了指向该字符串内容的c样式指针。但是获取该字符串下面的数据的所有权。一旦从函数返回,该字符串流和字符串将被销毁(因为它们是局部变量),而c_str()是一个悬空指针。所以整个事情都是未定义的行为。

答案 1 :(得分:1)

我修好了。这是我得到的代码:

std::stringstream ss;
std::string output;

ss << gvHours << "\'" << gvMinutes << "\"" << gvSeconds << ":" << gvTicks;

output = ss.str();
return output;

在需要的功能中:

fprintf(gvLog, ">: %s\n", timeString().c_str());