【发布时间】:2020-09-20 11:34:29
【问题描述】:
#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("%c\n", c);
printf("%c\n", d);
printf("%c\n", e);
return 0;
}
所有这些字符都打印为“?”。 试图理解为什么?它是垃圾值还是实际上分配给不同值的相同字符?这是极不可能的。
【问题讨论】:
-
"//这基本上是一个签名的字符,如果我没记错的话" 你错了,你不能依赖它。根据编译器和编译器设置,它可以是有符号或无符号的。
-
如果可能,将输出重定向到
a.out > t.bin之类的文件,然后对文件进行十六进制转储。 -
您希望在打印后看到什么字符?这些值是否代表您的编码中的任何特殊可打印字符?
-
如果您打印一些不代表任何可打印字符的值,操作系统可能只会显示一些“垃圾”字符。
-
尝试
for (int i = -128; i < 256; i++) printf("%d <%c>\n", i,i);了解正在发生的事情。
标签: c xcode macos macos-catalina