字符串流为空

String stream comes up empty

本文关键字:字符串      更新时间:2023-10-16

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

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"。有人知道我哪里做错了吗?

是的,这部分

return output.c_str();

坏了。

当你从std::string中取c_str()时,你只是得到一个指向该字符串内容的c风格指针。但是您没有获得对该字符串底层数据的所有权。一旦你从函数返回,stringstream和string被销毁(因为它们是局部变量),c_str()是一个悬空指针。这就是未定义行为

我修复了。下面是我得到的有效代码:

std::stringstream ss;
std::string output;
ss << gvHours << "'" << gvMinutes << """ << gvSeconds << ":" << gvTicks;
output = ss.str();
return output;

在需要的函数中:

fprintf(gvLog, ">: %sn", timeString().c_str());