c++ - 字符串流变空

标签 c++ string integer append stringstream

<分区>

我一直在尝试将一个整数 append 到一个字符串,我在这里尝试了几种解决方案,包括:

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() 是一个悬挂指针。所以整个事情都是未定义的行为。

关于c++ - 字符串流变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543299/

相关文章:

c++ - 在 Xcode 中静态链接 id3lib 的问题

c++ - 使用 XFT 库绘制彩色字符串的更快方法是什么?

c++ - 如何让 MinGW 将 "text"之类的文本视为 const char*

c - 如何将 1D char 转换为 2D int 数组并将其传递给 int C?

python - 在特定字符串后获取多个数字

c++ - 如何在 C++ 中为 copy_if 等定义 "unary predicate"?

c++ - Code::Blocks 可执行文件没有纹理

c++ - 替换字符串中的多对字符

python - 从 Python 中的复杂字符串中检索日期

c++ - C++ 中的三元条件运算符问题