【发布时间】:2016-01-09 08:08:36
【问题描述】:
如果在解释宽字符时发生编码错误,该函数将 errno 设置为 EILSEQ。
scanf("%d", &i);
如果输入大于2147483648(如果i是signed int),scanf会改变errno的值。
但是如果我尝试读取一个字符,像这样:
scanf("%c", &c);
是否可以输入导致编码错误的字符?我已经使用 UTF-8 输入对其进行了测试,但效果很好(௮、c 的十进制代码是 -32,但 errno 是 0)。
【问题讨论】:
-
%c不支持宽字符。%lc将是相关的转换说明符。 -
您的程序完全按预期运行。您的泰米尔语 Unicode 字符
௮的第一个字符值 U+0BEE 在 UTF8 表示法中确实是 224。当解释为 signed 字符值时,即是您得到的-32。
标签: c input error-handling scanf errno