在控制台应用程序中使用wcout时,我注意到一个奇怪的问题。

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

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

WCHAR wArray[1024];
wcout<<wArray<<endl;

就是在这个电话之后,所有其他wcout都停止了工作。

因此,我很想知道是什么使wcout与cout有所不同,以及为什么会出现此问题,

最佳答案

本示例调用未定义的行为。
operator<<(std::wostream&,const wchar_t*)期望缓冲区以null终止,并在到达第一个L'\0'字符时停止打印字符。如果缓冲区碰巧包含空字符(L'\0'),则代码将“正确”运行(尽管输出是不可预测的)。如果不是,那么operator<<将继续读取内存,直到遇到一个。

您的示例未强制使用空终止符。相比之下,以下内容将打印未指定数量的字符,很可能是垃圾字符,但定义明确:

WCHAR wArray[1024];
wArray[1023] = L'\0';
wcout << wArray << endl;

10-04 14:27