我一直试图在字符串中附加一个整数,我在这里尝试了几种解决方案,包括:
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”。有谁知道我做错了什么?
答案 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());