在 macOS 上为 c 打印"?"中的字符分配了负值


#include<stdio.h>
int main(){
signed char c;          //range of signed char is -128 to 127
char d;                 //this is basically a signed char, if I am not wrong
unsigned char e;        //range of unsigned char is 0 to 255
c = -12;
d = -12;
e = 255;
printf("%cn", c);
printf("%cn", d);
printf("%cn", e);
return 0;
}

这些字符都打印为"?"。 试图理解为什么?它是垃圾值还是实际上分配给不同值的相同字符?这是极不可能的。

当你将charsigned charunsigned char传递给printf时,它被提升为一个int值(在正常的C实现中,charint窄(。对于%c转换规范,printf将该int转换为unsigned char并写入生成的字符。

当字符不是正在使用的字符集的可打印字符时,显示"?"是一种常见行为。

char是有符号还是无符号是实现定义的,尽管它仍然是一个不同的类型,独立于signed charunsigned char

相关内容

  • 没有找到相关文章

最新更新