gpt4 book ai didi

c - _setmode 函数导致调试错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:11 28 4
gpt4 key购买 nike

好的,所以在发布之后 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++ 文档。

    (按重试调试应用程序)

  • 截图:

Debug Assert Failed

如果没有_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;
}

执行时出现错误。

最佳答案

看来,如果将输出模式设置为 UTF-16,则必须使用 wprintf 而不是 printf。

(大概是因为您已经告诉运行时从 UTF-16 转换,所以您必须提供 UTF-16。)

这段代码在我的机器上运行:

#include <fcntl.h>
#include <io.h>
#include <stdio.h>

int main(void) {
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
return 0;
}

也是

wprintf(L"Hello world!\n");

PS - 我不确定这是否会解决您的潜在问题,我怀疑这与源文件的编码有关。即使使用 UTF-16 确实解决了您的问题,它也可能不是最佳解决方案。

关于c - _setmode 函数导致调试错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33905670/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com