【发布时间】:2016-12-04 07:25:24
【问题描述】:
int c;
while ((c = getchar()) != EOF)
putchar(c);
"这个值叫做 EOF,代表“文件结束”。我们必须声明 c 是 一个足够大的类型,除了任何可能的字符外,还可以容纳 EOF。 因此我们使用 int。”
如果我错了,请纠正我:
- (有符号)字符 = [-128。 +127]
- 无符号字符 = [0, 255]
- EOF = -1
当我在上述程序中将int 替换为char 时,它似乎按预期工作,但经过一些研究我发现它不是因为变量c 不能存储-1 又名EOF (尽管使用char)。
我还是运行它并试图让它崩溃,我试图输入负数,如 -1,但它不起作用。我相信这是因为它被解释为 2 个不同的字符 - 和 1。我试过ÿ,这是根据http://ascii-code.com/对应ascii值255的字符,
那么上面的程序(使用char而不是int)会因为什么输入而崩溃?
(仅供参考,我使用的是 64 位 fedora Linux)
【问题讨论】:
-
你认为它为什么会崩溃?
-
Correct me if i am wrong:- 你错了。交换signed和unsigned范围。正如奥拉夫所说。 -
SCHAR_MIN,signed char的下限,通常是-128,而不是-127。这适用于CHAR_BIT==8的 2 补码实现。其他值是可能的。普通的char可以是签名的也可以是未签名的;它与signed char或unsigned char具有相同的范围和表示,但它仍然是一个不同的类型。 -
你对
char和unsigned char的看法是错误的——unsigned char的可能值是 0 - 255,而(有符号)char的值可以是 -128 到 127。 -
@KeithThompson:如果我们交换
signed和unsigned范围,这些是最小范围。仍然不确定 OP 的问题是什么。