【发布时间】:2015-11-24 23:15:27
【问题描述】:
好的,所以在发布this question 之后,我尝试使用社区指出的相关问题(特别是this)中提供的解决方案,但我遇到了另一个问题。
当尝试使用 _setmode() 函数更改 Windows 控制台以打印 UTF 字符时,我收到一个调试错误,就像在 this other question 上发布的错误一样。调试错误如下:
-
文字:
调试断言失败!
程序: ...kout-Desktop_Qt_5_5_0_MSVC2013_64bit-Debug\debug\Breakout.exe 文件:f:\dd\vctools\crt\crtw32\stdio\output.c 线路:1033
表达式:((_Stream->_flag & _IOSTRG) || ( fn = _fileno(_Stream), ( (_textmode_safe(fn) == _IOINFO_TM_ANSI) && !_tm_unicode_safe(fn))))
有关您的程序如何导致断言失败的信息,请参阅有关断言的 Visual C++ 文档。
(按重试调试应用程序)
截图:
如果没有_setmode() 函数,我仍然无法从上面的 ASCII 表中打印字符,例如:“┌──┐”。我能做些什么来解决这个问题?同样问题的解法也行不通。
再次,我在 Windows 上使用 Qt Creator,Qt 版本 5.5.0 MSVC 64 位。编译器是 Microsoft Visual C++ Compiler 12.0 (amd64)。
- 编辑:
这是一个导致错误的小示例代码:
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
int main(void)
{
//Using setmode to force the error
_setmode(_fileno(stdout), _O_U16TEXT);
printf("Hello World!\n");
return 0;
}
执行时出现错误。
【问题讨论】:
-
也许您可以发布一个显示问题的最小、完整的程序?
-
添加示例代码!
-
在我的情况下,当我发现我在像你一样调用 _setmode 之后仍然调用 cout 而不是 wcout 时,它停止了它。更改为 wcout,断言错误消失了。