关注嵌入式安卓物联网行业及人才培养,每日更新,欢迎订阅及留言讨论~~~

作者:倪键树,嵌入式安卓物联网讲师。



fgetcEOF的错综复杂关系

1fgetc对字节的读取

在正常的情况下,fgetc unsigned char 的方式读取文件流,扩展为一个整数,并返回。换言之,fgetc 从文件流中取一个字节,并加上24个零,成为一个小于256的整数,然后返回。


int c;

while ((c = fgetc(rfp))!= -1) // -1就是 EOF

fputc (c,wfp);


解析:上面 fputc 中的 c 虽然是整数,但在 fputc将其写入文件流之前,又把整数的高24位去掉了,因此 fgetcfputc 配合能够实现文件复制。到目前为止, c 定义为char仍然是可行的,但下面我们将看到,把 c 定义为 int 是为了能正确判段文件是否结束的,而char则不能判断文件是否结束。


2、判断文件结束


多数人认为文件中有一个EOF,用于表示文件的结尾。但这个观点实际上是错误的,在文件所包含的数据中,并没有什么文件结束符。fgetc 而言,如果不能从文件中读取,则返回一个整数 -1,这就是所谓的EOF返回 EOF 无非是出现了两种情况,一是文件已经读完; 二是文件读取出错,反正是读不下去了。


注意:在正常读取的情况下,返回的整数均小于2560x0~0xFF而读不出返回的是-10xFFFFFFFF但是假如你用