wcout是如何工作的?

roy*_*g86 4 c++ console cout visual-c++

我在控制台应用程序中使用wcout时发现了一个奇怪的问题.

在调用某个函数之后,其余的wcout调用根本不起作用.即输出语句没有出现在控制台上.

我注意到在函数中,我使用了一个从未分配的宽字符数组.

WCHAR wArray[1024];
wcout<<wArray<<endl;
Run Code Online (Sandbox Code Playgroud)

在这次电话会议之后,所有其他wcout都停止了工作.

所以,我只是想知道是什么让wcout与cout不同,以及为什么会出现这个问题,

Bil*_*eal 5

wcout可能正在对输出进行一些unicode验证; 如果验证失败,则输出失败.这部分是因为Windows控制台子系统不能很好地处理Unicode.

检查流是否已经failbitbadbit设置.重置流(例如wcout.clear())应该恢复流功能.

严格来说,cout是一个std::basic_ostream<char>并且wcoutstd::basic_ostream<wchar_t>......而且这就是差异所在.只是如果要形成良好的Unicode,对Unicode有更多的要求.