相关疑难解决方法(0)

swprintf在8位范围之外的字符上扼流圈

这在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(缓冲区不变).

我猜这个问题与locales有关,但谷歌搜索并没有给我提供任何有用的东西.这是重现我所看到的问题的最简单方法.我真正感兴趣的是vswprintf(),但我认为这是密切相关的.

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

c unicode macos wchar-t

3
推荐指数
1
解决办法
423
查看次数

标签 统计

c ×1

macos ×1

unicode ×1

wchar-t ×1