【发布时间】:2017-01-22 23:08:28
【问题描述】:
我试图通过将对应的十进制值传递给 printf 来打印出 Ș。输出什么都没有。为什么我的代码不起作用?
#include <stdio.h>
int main()
{
printf("%lc",536);
return 0;
}
【问题讨论】:
-
我不知道这是否是一个骗局,但you may need to set the locale on Linux。
-
另外,在 printf 之后尝试 fflush(NULL)。可能会或可能不会改变任何东西,但至少你会确定它正在被打印。
-
检查返回值。
int cnt = printf("%lc", ( wint_t ) 536); printf("%d\n", cnt);是 1 还是负值(错误)?错误表明printf()无法处理该字符。 -
这取决于您的操作系统、编译器和环境。如果您想从 C 库中获得任何类型的 Unicode 支持,那么在程序的开头调用
setlocale("", LC_ALL)是一种强制要求。这可能还不够。 -
我猜 C 库对 Unicode 的支持有点牵强。在某些情况下,您只需发出 UTF-8 而不关心任何内容,让终端对其进行排序,但通常最好的方法是了解操作系统以及您的程序和屏幕之间的任何内容并相应地处理它通过与操作系统而不是 C 对话。