3

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

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

当使用 Visual C++ 2012 编译它时,它会在fputws.

我用来编译的是 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:刚刚向微软提交了错误报告。

4

1 回答 1

1

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

于 2013-02-15T02:01:57.940 回答