这是来自Ritchie& S的 C编程语言的一些示例代码。 Kernighan的
int c;
while((c=getchar())!=EOF) {
putchar(c);
}
请注意,putchar引用了 int 类型的变量。为什么可以使用此代码返回并显示字符和整数?
答案 0 :(得分:4)
int
通常由4个字节表示,而char
实际上只是1个字节的数据。您可以轻松地在int
返回的单getchar()
中存储完整字符和更多字符。当一个int传递给putchar(int)
时,它只是在显示它之前减掉额外的空间。这种技术对于传递EOF
非常有用,char
实际上不是int
,而是传递文件末尾的{{1}}。
答案 1 :(得分:1)
char类型只是一个整数,在大多数情况下只是一个8位字节。 int类型是一个整数,通常更宽,因此可以保留char可以保留的所有可能值。为了使检查工作,它必须保持sizeof(int) > sizeof(char)
。几乎总是这样。但如果我记得很清楚,据说标准并没有强制要求;这意味着唯一便携且安全的方法来检查已经读过的EOF是否是真正的文件结尾,这是用feof(FILE *)
来检查的。 (例如,如果你的系统CHAR_BIT是16,sizeof(char)== 1的定义,但sizeof(int)也可以是1)。
答案 2 :(得分:1)
getchar()
返回int
,以便可靠地保存EOF
值(定义为任何负整数,并且在大多数实现中它是-1)。 char
类型可以是签名或未签名的,具体取决于实现。如果已签名,则可能能够保留EOF
值,前提是EOF
在signed char
类型的范围内,如果是当EOF
转换为unsigned char
类型时,无符号可能与实际字符值无法区分。