C语言文件操作函数之ferror & feof & clearerr
这些函数都是和文件读写时发生错误有关,下面一一分析:
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的更多相关文章
- C语言文件操作函数
C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * str ...
- C语言文件操作函数大全(超详细)
C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fc ...
- c语言文件操作函数详解
一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...
- C语言文件操作函数大全
http://blog.csdn.net/mu0206mu/article/details/18980913 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&l ...
- [转]C语言文件操作函数大全(超详细)
fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const cha ...
- 04--C语言文件操作函数大全(超详细)
fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const cha ...
- C 语言文件操作
C 语言文件操作 1. 数据流: 程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流. 所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...
- C语言样式的文件操作函数
使用C语言样式的文件操作函数,需要包含stdio.h头文件. 1.打开文件的函数: //oflag的取值为“w”或“r”,分别表示以写或读的方式打开 FILE* fd = fopen(filename ...
- C语言 文件操作5--文件的常用函数
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //stdin:标准输入文件指针,系统 ...
随机推荐
- Associated Values & enum
it is sometimes useful to be able to store associated values of other types alongside these case val ...
- SciSharpCube:容器中的SciSharp,.NET机器学习开箱即用
SciSharp Cube 在Docker容器中快速体验SciSharp机器学习工具的最新功能. 项目地址:https://github.com/SciSharp/SciSharpCube 从Dock ...
- 安装`lrzsz`包及其报错解决办法
rz命令的安装包名是lrzsz. 安装lrzsz包时报错Failed to mount cd:///?devices=/dev/sr1,/dev/sr0 on /var/adm/mount/AP_0x ...
- Ansible常见问题处理
1.ansible all -m ping报错,信息如下: [WARNING]: log file at /var/log/ansible.log is not writeable and we ca ...
- C# 日期格式
# DateTime日期格式化 在C#中DateTime是一个包含日期.时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式. 目录 1 ...
- redis 模拟搭建集群
一.本文是在一台 linux 系统上,模拟搭建 redis 集群.3 台主机,3 台从机. 二.redis 安装步骤 http://www.cnblogs.com/fangwu/p/8602357.h ...
- asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值
asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...
- CF786A - Berzerk
/* CF786A - Berzerk http://codeforces.com/contest/786/problem/A 博弈论 直接搜出NP状态图.记得要记忆化剪枝. * */ #includ ...
- PowerDesigner16 破解
近期开发项目,涉及到实体设计这块的时候,用的是PowerDesigner16,使用是挺方便的,可是存在一个问题.那就是PowerDesigner16存在一个试用期的问题,过期就打不开了. 之前好多同学 ...
- HDU 4893 线段树裸题
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...