Chinaunix首页 | 论坛 | 博客
  • 博客访问: 856139
  • 博文数量: 286
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1980
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 16:41
文章分类

全部博文(286)

文章存档

2020年(2)

2018年(5)

2017年(95)

2016年(69)

2015年(15)

2014年(100)

我的朋友

分类: LINUX

2016-11-03 14:40:39

原文地址:fgetc、EOF 作者:aoyang888

最近使用EOF判断文件结束始终不正确,查了点资料才知道
     EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASCⅡ代码值的形式存放,ASCⅡ代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。
  当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
    feof(fp)可以判断文件到结束。while (!feof(fd))  str += fgetc(fd);
    feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0。但“while(!feof(FP)){...}”进行文件复制时,目标文档总会比源文档“多出一些”
    在“C”文件读取操作时不能完全依赖于“while(!feof(FP)){...}”的判断。文件会发现多输出了一个FF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FF)。
  int c;
  c = fgetc(fp);
  while(!feof(fp))
  {
  printf("%X\n", c);
  c = fgetc(fp);
  }
  feof()可以用EOF代替吗?不可以。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。 
阅读(862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~