c - 为什么在 Windows 上打印这个宽字符串会崩溃?

标签 c windows printf visual-studio-2019 widechar

我在进行一些单元测试时偶然发现了一个问题,我不完全确定为什么以下简单示例在使用 sprintf(将 Windows 与 Visual Studio 2019 结合使用)时会崩溃。

#include <stdio.h>
#include <locale.h>

int main()
{
    setlocale(LC_ALL, "en_US.utf8");
    char output[255];
    sprintf(output, "simple %ls text", L"\u00df\U0001d10b");
    return 0;
}

代码有问题吗?

最佳答案

char 是 8 位的,wchar_t 是 16 位的。当您尝试转换两者时,您将不得不使用像 MultiByteToWideChar 这样的函数在两者之间进行转换。

当您尝试在多字节函数中使用 Unicode 字符串时,会导致缓冲区溢出,这可能是您崩溃的原因。

请尝试使用 swprintf_s

关于c - 为什么在 Windows 上打印这个宽字符串会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62968096/

相关文章:

c - 用于从 char 类型中减去的简单 C 语法,小写

c - C语言中BASIC和EWrite中的EEDATA相当于什么?(如何通过xc8编译器使用EEPROM?)

c - 读取文件和存储数据链表错误c

c++ - 输出 float 而不以零结尾的 sprintf() 模式是什么?

c - 如何检查输入结束? C、找到42

windows - 如何确定我当前的 PowerShell 控制台是否运行提升(以管理员身份)

windows - 在 Windows 机器上开发,在 Linux (Ubuntu) 上部署

C++打印机不想打印

c - C中sprintf的段错误

c++ fscanf %c 无法正常工作