当前位置:  开发笔记 > 编程语言 > 正文

确定字符串是否是C中的有效wchar_t*

如何解决《确定字符串是否是C中的有效wchar_t*》经验,为你挑选了1个好方法。

我正在尝试重新编写printf的一部分.

setlocale(LC_ALL, "en_US.UTF-8");
int ret = printf("%S\n", "??????");
printf("Printf returned %d\n", ret);

如果格式为%s,则printf写入宽字符并返回19.

如果格式为%S,则printf返回-1,因为参数不是宽字符串(在""之前没有L).

在我自己的printf实现中,如何确定参数中传递的字符串是否宽,所以如果不是,我可以返回-1?

编辑

我正在使用OS X El Capitan进行编程(但如果有可能,我会想要一个可移植的解决方案)

在我的编程环境中,%S和%ls是相同的 - 这对我的问题并不重要

当我没有为格式为%s的示例设置区域设置时,Printf也返回-1.这是我设置语言环境的唯一原因.

我正在使用clang编译(Apple LLVM版本7.0.0(clang-700.1.76))

fuz.. 6

基本上,你不能.传递不是宽字符串的东西%S不确定的行为,任何事情都可能发生,包括从鼻子里飞出来的dæmons.您很幸运能够printf捕获到这一点,很可能它会检测到"??????"解释为数组时的内容wchar_t并非都是有效的代码点(如果发生这种情况,errno则设置为EILSEQby printf).



1> fuz..:

基本上,你不能.传递不是宽字符串的东西%S不确定的行为,任何事情都可能发生,包括从鼻子里飞出来的dæmons.您很幸运能够printf捕获到这一点,很可能它会检测到"??????"解释为数组时的内容wchar_t并非都是有效的代码点(如果发生这种情况,errno则设置为EILSEQby printf).

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有