到目前为止,我已经发现,我们使用getchar()作为int,因为在EOF这个函数返回-1。我想知道 char 能保持-1吗?我认为它可以,因为它也可以在-128到127之间。
我搜索了谷歌的顶级列表,但我得到的答案并不能让我满意。
答案 0 :(得分:6)
首先,为了清除某些内容,EOF
不需要具体为-1。 ISO C标准要求它具有负值。
另请注意,char
类型可以是签名或未签名的;这是实现定义的。
函数fgetc
,getc
和getchar
可用于处理二进制流,而不仅仅是文本流。字节的值从0到UCHAR_MAX
。此范围的自然类型为unsigned char
。 getc
的返回值不能为unsigned char
,因为EOF
无法表示。它也不能signed char
,因为signed char
无法保存从0到UCHAR_MAX
的值。因此,选择更宽的类型:类型int
。在主流平台上,int
比char
宽:它的大小至少为2.因此它能够表示可用于EOF
的某些负值,以及0到UCHAR_MAX
范围内的所有字节值。
在某些C实现中(对于诸如某些DSP芯片之类的系统),情况并非如此:int
是一个字节宽。这代表了挑战。在这样的C实现中,getc
返回的一系列有效字节值必须为负数,其中一个值与EOF
冲突。仔细编写的代码可以说明情况是这样的:返回了等于EOF
的值,但feof
和ferror
函数报告为false:流没有错误,并且结束 - 没有发生文件。因此,看起来像EOF
的值实际上是一个有效字节。
答案 1 :(得分:4)
getchar()
和系列会返回一个整数,以便EOF -1
可与(char)-1
或(unsigned char)255
区分开来。
答案 2 :(得分:0)
使用Ascii编码的字符使用一个字节存储,该字节是无符号的8位整数。因此,字符可以取数值0-255。
getchar返回一个带符号的int以允许-1,这是文件结束(EOF)的幻数