我正在尝试重新编写printf的一部分.
setlocale(LC_ALL, "en_US.UTF-8");
int ret = printf("%S\n", "??????");
printf("Printf returned %d\n", ret);
Run Code Online (Sandbox Code Playgroud)
如果格式为%s,则printf写入宽字符并返回19.
如果格式为%S,则printf返回-1,因为参数不是宽字符串(在""之前没有L).
在我自己的printf实现中,如何确定参数中传递的字符串是否宽,所以如果不是,我可以返回-1?
编辑
基本上,你不能.传递不是宽字符串的东西%S是不确定的行为,任何事情都可能发生,包括从鼻子里飞出来的dæmons.您很幸运能够printf捕获到这一点,很可能它会检测到"??????"解释为数组时的内容wchar_t并非都是有效的代码点(如果发生这种情况,errno则设置为EILSEQby printf).
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |