我发现了在 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:刚刚向微软提交了错误报告。