使用 ostringstream 导致程序崩溃
Posted
技术标签:
【中文标题】使用 ostringstream 导致程序崩溃【英文标题】:Using ostringstream causing program crash 【发布时间】:2015-08-18 17:50:52 【问题描述】:我有一些需要维护的旧 C++ 应用程序/服务在 Windows 2003 上运行(不是选择)。我已经完成了一切准备工作并使用 VS 2013,但现在我无法让任何 C++ 项目再次工作。他们只是崩溃。我将范围缩小到使用 stringstream 时,所以我编写了一个示例 Win32 exe 进行测试。
这些是我在 VS 2013 Update 5 中更改的唯一设置: 设置为使用平台工具集 = Visual Studio 2013 - Windows XP (v120_xp)。特点 Set = 使用多字节字符集。
int _tmain(int argc, _TCHAR* argv[])
ostringstream zs;
zs << "Hello";
string strTemp = zs.str();
printf("%s\n", zs.str().c_str());
return 0;
它在 zs 上崩溃
【问题讨论】:
请详细说明只是崩溃!您可能缺少一些 DLL 或绑定到错误的 DLL。 redist DLL 在那里。我从 2010 年到 2013 年的每个版本都有它们(msxxx100.dll、110.dll 和 120.dll)。当您缺少相应的 redist dll 时,问题不会崩溃。操作系统显示缺少所需 DLL 的消息。当我尝试附加到 zs 时发生崩溃。在这个例子中,它在 zs 什么是异常/编译器错误信息?通常程序不会“只是崩溃”。 ILLEGAL_INSTRUCTION (0xc000001d) 地址为 0x00416ab9。我可以注释掉 zs 你试过zs << L"Hello";
了吗?可能是多字节字符识别的问题。
【参考方案1】:
在 Visual Studio 2013 及更高版本中,用于多字节字符编码 (MBCS) 的 MFC 库作为 Visual Studio 的单独插件提供,可从 MSDN 下载站点下载。
https://msdn.microsoft.com/en-us/library/5z097dxa.aspx
【讨论】:
以上是关于使用 ostringstream 导致程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
c++ std::ostringstream vs std::string::append