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