gpt4 book ai didi

c - swprintf 在 8 位范围之外的字符上阻塞

转载 作者:行者123 更新时间:2023-12-01 11:59:24 26 4
gpt4 key购买 nike

这发生在 OS X 上,但我怀疑它适用于任何 UNIX-y 操作系统。我有两个如下所示的字符串:

const wchar_t *test1 = (const wchar_t *)"\x44\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";const wchar_t *test2 = (const wchar_t *)"\x44\x00\x00\x00\x19\x20\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00";

在调试器中,test1 看起来像“Ds”,而 test2 看起来像“D's”(带有弯撇号)。然后我调用这段代码:

wchar_t buf1[100], buf2[100];int ret1 = swprintf(buf1, 100, L"%ls", test1);int ret2 = swprintf(buf2, 100, L"%ls", test2);

第一个 swprintf 调用工作正常。第二个返回 -1(缓冲区不变)。

我猜这个问题与语言环境有关,但谷歌搜索并没有为我提供任何有用的信息。这是重现我所看到的问题的最简单方法。我真正感兴趣的是 vswprintf(),但我认为它密切相关。

为什么 swprintf 会阻塞 8 位范围之外的 unicode 字符?有什么办法可以解决这个问题吗?

最佳答案

尝试将语言环境明确设置为 UTF-8。

setlocale(LC_CTYPE, "UTF-8");
...
const wchar_t* test2 = L"D\x2019s";
int ret2 = swprintf(buf2, 100, L"%ls", test2);
...

关于c - swprintf 在 8 位范围之外的字符上阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085751/

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