繁体   English   中英

为什么%c打印'?' 它是什么意思

[英]Why does %c print '?' and what is its meaning

两个例子

printf("\n %c , ((unsigned char)a[i]+100);

printf("\n %c , -11);

退货

?
?

您在两个语句中都缺少结尾处的“。正在使用什么编译器?如果使用带有-Wall编译器标志的gcc进行编译,则会看到:

warning: missing terminating " character
     printf("\n %c , ((unsigned char)a[i]+100);

字符-11不是有效的7位ASCII字符。 这也是一个无效的UTF-8字节,因此? 结果。

只有字符0-127对%c有效。 其他所有内容都将成为多字节UTF-8字符的一部分,或者取决于字符集。

"%c"预期为int

(unsigned char)a[i]+100(unsigned char) + (int) (unsigned char)为8位(最常见)时,这将导致一个int 因此,在下面的两个代码中,代码都将int传递给printf()

printf("\n %c , ((unsigned char)a[i]+100);
printf("\n %c , -11);

"%c"将该int转换为unsigned char

c ...将int参数转换为unsigned char ,并写入结果字符。 C11dr§7.21.6.18

假设使用8位unsigned char ,则转换后的值在0到255的范围内。-11变为245。然后写入字符。 对于ASCII范围为0-127的值,我们通常会看到ASCII字符或控制字符的效果。 其他值将打印其他内容。

当然在OP的平台上,输出默认为? 用于许多超出ASCII范围的字符。 @稻田

您猜对了, c返回一个字符。 这意味着在%c ,将在打印字符串中该位置替换一个字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM