【c语言基础必备】标准库函数fgetc() 的理解

#include <stdio.h>

int fgetc(FILE *fp);

" fegtc() 函数从输入stream中返回当前位置的下一个字符,并且将文件的位置指示符加1,并将读取的字符按照unsigned char 形转换为整数以作为返回值。fgetc()在读取到文件的末尾时,返回值为EOF。”


思考:既然fgetc()的功能是从文件中读取字符(char),为何在上面的定义中,它的返回值为int?

答案:

fgetc()这样的设计是与EOF的定义有关的。

ANSI C中,EOF这个常量符号,是在stdio.h文件中定义的。EOF的值通常是-1,但是EOF的意义在于将读到文件末尾与读到合法值这两种状态区分出来,因此,EOF可以被定义成任何不属于合法字符范围内的值。


"   EOF is an integer defined in<stdio.h>,but the specific numeric value doesn't matter as long as it is not the same as any char value.By using the symbolic constant,we areassured that nothing in the program depends on the specific numeric value.

    In our system EOF is -1,but it may vary from system to system.That's why standard symbolic constants like EOF help make your profram portable. "

                                                    ——《THE C PROGRAMMING LANGUAGE 》


在EOF为-1的前提下,以EOFASCII字符集为例,在使用fgetc()读取文件时,由于0XFF属于ASCII字符集的有效值,因此如果我们将fgetc()的返回值定义为char的话,那么调用者将无法区分究竟是读到了文件末尾,还是从文件中读取了一个值为0XFF的字符。而将返回值定义为int的话,在读取到合法字符OXFF是,按照前面提到的转换规则,fgetc()的返回值将是0x000000FF,这样调用者就不会陷入二义性的困境了。

既然明白了fgetc()为何将返回值定义为int,那么调用fgetc时,就绝不应该用一个char型变量来存放其返回值,而必须用int型变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值