c/c++语言开发共享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字符? 反正有解决这个问题吗?

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

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

      以上就是c/c++开发分享swprintf在8位范围之外的字符上扼流圈相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562353.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐