我在进行一些单元测试时偶然发现了一个问题,我不完全确定为什么以下简单示例在使用 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/