wchar and stdout in VC11
wchar and stdout in VC11
我在Visual Studio 2012中发现了一个输出宽字符的奇怪问题,我已将其缩小到以下代码中。
#include <cstdio>
int main()
{
fputws(L"Hello Worldn", 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 Worldn", stdout); // Now this works.
}
有人有什么想法吗?
编辑:
以下类似的功能在VS2012中运行良好:
std::wcout << L"Hello world" << std::endl;
wprintf(L"Hello worldn");
_putws(L"Hellon", stdout);
putwchar(L'H');
编辑2:刚刚向微软提交了一份错误报告。
我在RTM VS2012上遇到了这个问题,但在VS2012更新1上没有。在问题系统上安装更新1后,错误消失。感谢Mats的报道。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复"error: ‘_1’ was not declared in this scope"?
- Softmax Implementation in C++
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- IF-nesting in c++
- Gurobi GRBModel and GRBmodel in C++
- Tensorflow Hub in C++
- Centos7 g++ "to_string is not in a member of std"
- InitializeCriticalSectionEx Not Located In KERNEL32.Dll
- 将 lambda 表达式传递给 std::function in C++
- wchar and stdout in VC11
- 如何修复理性狂想曲错误:"Current value is " VC11 ", but no Visual Studio installation was not found in the direc