为什么getchar()函数在C中是一个整数?

时间:2016-09-06 05:27:42

标签: c getchar

到目前为止,我已经发现,我们使用getchar()作为int,因为在EOF这个函数返回-1。我想知道 char 能保持-1吗?我认为它可以,因为它也可以在-128到127之间。

我搜索了谷歌的顶级列表,但我得到的答案并不能让我满意。

3 个答案:

答案 0 :(得分:6)

首先,为了清除某些内容,EOF不需要具体为-1。 ISO C标准要求它具有负值。

另请注意,char类型可以是签名或未签名的;这是实现定义的。

函数fgetcgetcgetchar可用于处理二进制流,而不仅仅是文本流。字节的值从0到UCHAR_MAX。此范围的自然类型为unsigned chargetc的返回值不能为unsigned char,因为EOF无法表示。它也不能signed char,因为signed char无法保存从0到UCHAR_MAX的值。因此,选择更宽的类型:类型int。在主流平台上,intchar宽:它的大小至少为2.因此它能够表示可用于EOF的某些负值,以及0到UCHAR_MAX范围内的所有字节值。

在某些C实现中(对于诸如某些DSP芯片之类的系统),情况并非如此:int是一个字节宽。这代表了挑战。在这样的C实现中,getc返回的一系列有效字节值必须为负数,其中一个值与EOF冲突。仔细编写的代码可以说明情况是这样的:返回了等于EOF的值,但feofferror函数报告为false:流没有错误,并且结束 - 没有发生文件。因此,看起来像EOF的值实际上是一个有效字节。

答案 1 :(得分:4)

getchar()和系列会返回一个整数,以便EOF -1可与(char)-1(unsigned char)255区分开来。

答案 2 :(得分:0)

使用Ascii编码的字符使用一个字节存储,该字节是无符号的8位整数。因此,字符可以取数值0-255。

getchar返回一个带符号的int以允许-1,这是文件结束(EOF)的幻数