这发生在 OS X 上,尽管我怀疑它适用于任何 UNIX-y 操作系统。我有两个看起来像这样的字符串:
常量 wchar_t *test1 = (常量 wchar_t *)"\x44\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00"; 常量 wchar_t *test2 = (常量 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 字符?有没有办法解决这个问题?