这些函数都是和文件读写时发生错误有关,下面一一分析:

1:ferror

原型:int ferror(FILE * fp)

作用:测试一个文件流是否被设置了错误标识符,如果是返回非 0 整数,否则返回 0。

例子:

short ch;
FILE * f1;
f1 = fopen("test.txt", "w");
ch = fgetc(f1);
//注意,我们以 只写 方式打开了文件,但是却尝试向该文件读取一个字符,肯定会操作失败,这时,该文件流就会被设置上错误标识符
printf("%d\n", ch);
//这里输出 -1 ,因为当fgetc函数操作失败时返回 EOF,即 -1
if(ferror(f1)){
//用函数ferror测试文件流是否存在错误标识符
printf("Have a error.\n");
//结果自然是,所以输出错误信息
}
fclose(f1);

注意:每次发生不同的操作错误都会更新文件流上次保存的错误标识符,例如:先后发生了A和B两个文件操作错误,并且A错误的标识符为16,B错误的标识符为32,那么文件流保存的错误标识符就是 32,用ferror(fp)读取返回的结果就是 32。

2:feof

原型:int feof(FILE * fp)

作用:测试一个文件流是否被设置了文件结束标识符,如果是返回非 0 整数,否则返回 0。

例子:

FILE * f1;
short ch;
f1 = fopen("utf8.txt", "r");
/*
此文件的十六进制结构为:
31 22
(共两个字节)
*/
while(){
ch = getc(f1);
//在第三次循环执行getc语句时,由于文件指针已经指向了EOF,所以这次getc函数读取EOF值(-1)之后,如果指针再向后偏移一位,就发现不指向任何有效的位置了(这时指针不会发生偏移了),所以这时文件流会被设置上文件结束标识符
if (feof(f1)){
break;
}
printf("%x\n", ch);
}
fclose(f1);
/*
输出:
31
22
Press any key to continue
*/

注意:feof函数检测文件是否结束的方法很诡异,它不是检测当前文件指针是否指向EOF位置,而是检测EOF是否已经被读取出来了,就像上面代码的第三次循环,这时getc把EOF位置读取出来了,然后发现指针不能再向后面移动了,所以才给文件流设置上文件结束的标识。

3:clearerr

原型:void clearerr(FILE * fp)

作用: 清除一个文件流的文件结束和错误标识符(即把文件结束符和错误标识符从非 0 值变成 0 值)。

例子:

FILE * f1;
short ch;
f1 = fopen("utf8.txt", "r");
while(){
ch = getc(f1);
if (feof(f1)){
break;
}
}
//上面循环结束之后,文件流已经被设置了文件结束标志
printf("%d\n", feof(f1)==);
//输出 0,说明feof返回非 0 值,即检测到文件已经到结束位置
clearerr(f1);
//清除文件流结束标志和错误标志
printf("%d\n", feof(f1)==);
//输出 1,说明feof返回 0 值,即检测到文件没到结束位置,虽然实际上已经到结束位置了
fclose(f1);

注意:调用文件指针重置函数rewind(原型:void rewind(FILE * fp)),也会清除文件流的结束标志。

C语言文件操作函数之ferror & feof & clearerr的更多相关文章

  1. C语言文件操作函数

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...

  2. C语言文件操作函数大全(超详细)

    C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下   fopen(打开文件)相关函数 open,fc ...

  3. c语言文件操作函数详解

    一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

  4. C语言文件操作函数大全

    http://blog.csdn.net/mu0206mu/article/details/18980913 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&l ...

  5. [转]C语言文件操作函数大全(超详细)

    fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const cha ...

  6. 04--C语言文件操作函数大全(超详细)

    fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const cha ...

  7. C 语言文件操作

    C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

  8. C语言样式的文件操作函数

    使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...

  9. C语言 文件操作5--文件的常用函数

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //stdin:标准输入文件指针,系统 ...

随机推荐

  1. DBGridEh checkbox的一个问题

    function TCustomDBGridEh.CheckBeginRowMoving(MouseX, MouseY: Integer; CheckInOnly: Boolean): Boolean ...

  2. ERROR 1062 (23000): Duplicate entry for key 'PRIMARY'

    ALTER TABLE table1 ADD COLUMN column1 VARCHAR(400) DEFAULT NULL; ERROR 1062 (23000): Duplicate entry ...

  3. 从ReadImage到ML- 一个不错的博客

    实在对不起原作者,为了不把文章淹没在 转载的海洋里.... 原文链接:     http://www.cnblogs.com/tornadomeet/archive/2012/09/26/270404 ...

  4. APUE学习笔记3——文件和目录

    1 简介 之前学习了执行I/O操作的基本函数,主要是围绕普通文件I/O的打开.读或写.下面继续学习Unix文件系统的其他特征和文件的基本性质.我们将从stat函数开始,了解stat结构所代表的文件属性 ...

  5. 【技术累积】【点】【java】【2】聊一聊似曾相识的switch语句

    闲聊 有些东西并不能像爱因斯坦老先生说的那样,书上查的到就不用去记住... 开始 java使用了C的所有流程控制语句: java中同样有switch语句: 大多数情况下,switch都可以用if替换: ...

  6. JS 封装一个对数组去重的函数

    var zz = [1,2,3,5,5,7,8,6,6]; var se = []; d(se); function d(attr){ for(var i = 1;i<zz.length;i++ ...

  7. Fiddler4抓包工具使用教程

    本文参考自http://blog.csdn.net/ohmygirl/article/details/17846199,纯属读书笔记,加深记忆 1.抓包工具有很多,为什么要使用Fiddler呢?原因如 ...

  8. 铁大FaceBook的使用体验

    铁大FaceBook是一个类似QQ和微信等聊天程序的缩小版网站,并且其针对领域较为狭窄:即只针对校园的学生和导员等人员.但其有值得推广的潜力性和可能性. 对于使用它的体验:第一点我感觉这个网站的界面很 ...

  9. parted分区流程操作

    parted不同于fdisk(<2T)它比fdiskf更加灵活,fdisk需保持后才能生效,而parted是分区后直接生效! 磁盘分区步骤: 1.parted /dev/sdb #进入磁盘分区 ...

  10. 提高生产力:Web前端验证的标准化

    统一验证标准,减少重复劳动,提高生产力. 当公司内部有多个Web项目的时候,统一验证标准就很有必要了.统一不同项目的验证规则,比如 同为用户名 使用同一套标准,甚至用户名和机构名等也使用同一套标准.( ...