1 函数原型
ferror():检查指定流stream的错误指示器是否被设置,函数原型如下:
int ferror ( FILE * stream );
cstdio库描述如下:
Check error indicator
1. Checks if the error indicator associated with stream is set, returning a value different from zero if it is.
2. This indicator is generally set by a previous operation on the stream that failed, and is cleared by a call to clearerr, rewind or freopen.
- 流的错误指示器是在文件流内部维护的一个状态标志:
(1)用于指示基于流的操作过程中是否发生了错误;
(2)读写错误:使用fread()、fwrite()、fscanf()、fprintf()、fgets()、fputs()、fputc()和fgetc()等函数,对流进行读写操作的过程中发生了错误,则流的错误指示器会被设置;
(3)定位错误:使用fseek()、fsetpos()和rewind()等函数,对流进行重定位操作的过程中发生了错误,则流的错误指示器会被设置;
(4)刷新错误:使用fflush()函数对流进行刷新操作的过程中发生了错误,则流的错误指示器会被设置;
(5)通常,在操作流后,通过 ferror ()函数来检查流的错误指示器是否被设置。
cstdio库描述如下:
1. Streams have certain internal indicators that specify their current state and which affect the behavior of some input and output operations performed on them.
2. Error indicator
(1) This indicator is set when an error has occurred in an operation related to the stream.
(2) This indicator can be checked with the ferror function, and can be reset by calling either to clearerr, freopen or rewind.
2 参数
ferror()函数只有一个参数stream:
- 参数stream是ferror()函数要检查的流,类型为FILE*;stream可以是文件流或标准流;当是文件流时,stream就是fopen()函数的返回值;当是标准流时,stream就是stdin、stdout和stderr。
cstdio库描述如下:
stream
1. Pointer to a FILE object that identifies the stream.
3 返回值
ferror()函数的返回值类型为int型:
- 如果流操作有错误,流的错误指示器被设置,返回非0值;
- 如果流操作无错误,流的错误指示器未设置,返回0值。
cstdio库描述如下:
1. A non-zero value is returned in the case that the error indicator associated with the stream is set.
2. Otherwise, zero is returned.
4 示例
示例代码如下所示:
int main() {
//
FILE* fp = NULL;
char buffer[100] = { 0 };
// 打开文件
fp = fopen("1.txt", "r");
if (fp == NULL) {
perror("Failed to open file ");
exit(1);
}
// 读文件
while (1) {
if (fgets(buffer, sizeof(buffer), fp) == NULL) {
// 检查是否是因为文件结束而读取失败
if (feof(fp)) {
printf("\nReached end of file.\n");
}
else {
// 检查是否因为错误而读取失败
if (ferror(fp)) {
printf("\nError reading file.\n");
// 清除错误标志,以便后续操作
clearerr(fp);
// 可以在这里处理错误,比如关闭文件等
}
}
break;
}
else {
// 成功读取数据
printf("%s", buffer);
}
}
// 关闭文件
fclose(fp);
//
return 0;
}
文件内容如下图所示:
代码运行结果如下图所示: