c++ - std::ostringstream 未返回有效字符串

标签 c++ winapi std ostringstream

我正在尝试使用 std::ostringstream 将数字转换为字符串 (char *),但它似乎不起作用。这是我的代码:

#include <windows.h>
#include <sstream>

int main()
{
    std::ostringstream out;
    out << 1234;

    const char *intString = out.str().c_str();

    MessageBox(NULL, intString, intString, MB_OK|MB_ICONEXCLAMATION);

    return 0;
}

生成的消息框内根本没有文本。

这让我相信对 out.str().c_str() 的调用返回了一个无效的字符串,但我不确定。由于到目前为止我已经对这个程序进行了缩减,但问题仍然存在,所以我一定是犯了一个令人尴尬的简单错误。感谢您的帮助!

最佳答案

out.str() 返回一个 std::string 按值,这意味着您正在调用 .c_str( ) 在一个临时的。因此,在初始化 intString 时,它已经指向无效(已损坏)数据。

缓存 .str() 的结果并使用它:

std::string const& str = out.str();
char const* intString = str.c_str();

关于c++ - std::ostringstream 未返回有效字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164982/

相关文章:

c++ - 当我返回传递给函数的引用参数时,内部会发生什么?

C++异步创建对象

c++ - C++ Primer Plus 6th 第 3 章 - 关于如何使用通用字符名

c++ - 以编程方式将目录添加到 Windows PATH 环境变量

c++ - (错误 C2678)错误 : No operator "<<" matches these operands

c++ - std::find 在空 vector 上是否会导致未定义的行为?

c++ - 指向 std::vector 的指针

c++ - 在进行大量类似的方法调用时避免定义宏

c++ - Windows.h 宏未定义

c# - 通过 Win32 API 你将如何获得一类 SysListView32 的值