VC11中的wchar和stdout

时间:2012-11-28 19:50:59

标签: c++ visual-studio-2012

我发现在Visual Studio 2012中输出宽字符时出现了一个奇怪的问题,我将其缩小到以下代码。

#include <cstdio>
int main()
{
  fputws(L"Hello World\n", stdout); // Throws Access Violation exception
}

使用Visual C ++ 2012进行编译时,会在fputws内的某处抛出“未处理的异常”,“访问冲突读取位置0x00000064”。

我用来编译的是CLI版本,只是为了排除IDE中的任何设置。我打开Visual Studio命令提示符并使用以下内容:

cl test.cpp

使用Visual Studio 2008或Visual Studio 2010时效果很好,写出“Hello World”。

但是在使用Visual Studio 2012时,它会因上述错误而崩溃。

我很难相信它是一个编译器问题,而是在不同版本的C ++之间发生了变化。

另一个(有趣的)是,如果我首先输出正常的char,就像下面的代码片段一样,它可以正常工作。那么我认为这是一个未初始化的流的问题?

#include <cstdio>
int main()
{
  fputs("", stdout);
  fputws(L"Hello World\n", stdout); // Now this works.
}

有人有任何想法吗?

编辑:

以下类似的功能在VS2012中运行良好:

std::wcout << L"Hello world" << std::endl;
wprintf(L"Hello world\n");
_putws(L"Hello\n", stdout);
putwchar(L'H');

编辑2: 刚刚向微软提交了bug report

1 个答案:

答案 0 :(得分:1)

我在RTM VS2012上遇到此问题,但在VS2012 Update 1上没有。在问题系统上安装Update 1后,错误消失了。感谢Mats报道此事。