gpt4 book ai didi

c - 与 EOF 比较时对字符类型使用 int

转载 作者:太空狗 更新时间:2023-10-29 15:15:13 26 4
gpt4 key购买 nike

引自 Kernighan 和 Ritchie 的“The C Programming Language”第 16 页 -

#include<stdio.h>

main()
{
int c;
c = getchar();

while(c!=EOF)
{
putchar(c);
c = getchar();
}

getchar();
return 0;
}

"The type char is specifically meant for storing such character data, but any integer type can be used. We used int for a subtle but important reason. The problem is distinguishing the end of the input from valid data. The solution is that getchar returns a distinctive value when there is no more input, a value that cannot be confused with any real character. This value is called EOF, for "end of file". We must declare c to be a type big enough to hold any value that getchar returns. We can't use char since c must be big enough to hold EOF in addition to any possible char. Therefore we use int.".

我在 stdio.h 中查找,它说 #define EOF (-1)

这本书最终指出 char 不能使用,而这个程序“工作得很好”(见编辑)使用 c 作为 char 数据键入以及。到底是怎么回事?谁能用位和有符号值来解释?

编辑:
正如 Oli 在回答中提到的,程序无法区分 EOF255。所以它不会正常工作。我想知道发生了什么——你是说当我们进行比较 c!=EOF 时,EOF 值被强制转换为 char 值 = 255(二进制为 11111111;即,当以 2 的补码写入时,EOF 的第 0 位到第 7 位符号)?

最佳答案

getchar 结果是将输入的字符转换为unsigned char 然后再转换为intEOF 即在 -1 - 255 范围内,即 257 个不同的值,如果不合并其中两个值,则不能将其放入 8 位 char 中。实际上,您要么将 EOF 误认为是有效字符(如果 char 是无符号的,则会发生这种情况),要么将另一个字符误认为是 EOF(即如果 char 被签名,将会发生。

注意:我假设一个 8 位 char 类型,我知道这个假设没有得到标准的支持,它只是迄今为止最常见的实现选择。

关于c - 与 EOF 比较时对字符类型使用 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com