C 库 - clearerr() 函数



C 库的 clearerr(FILE *stream) 函数清除给定流的文件结束和错误指示符。当您希望在发生错误或 EOF 条件后重置文件流的状态时,这很有用。

语法

以下是 C 库 clearerr() 函数的语法:

void clearerr(FILE *stream);

参数

此函数仅接受一个参数:

  • stream: 指向 FILE 对象的指针,指定要清除其错误指示符和 EOF 标志的流。此 FILE 对象应由诸如 fopen 之类的函数事先打开。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

返回值

clearerr 函数不返回值。它是一个 void 函数,这意味着它执行其操作而不提供直接反馈。

示例 1:清除 EOF 标志

此示例读取文件内容直到到达 EOF,然后使用 clearerr 清除 EOF 标志,并确认 EOF 标志已被清除。

以下是 C 库 clearerr(FILE *stream) 函数的示例。

#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Failed to open file"); return 1; } char ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); } if (feof(file)) { printf("\nEOF reached.\n"); } clearerr(file); // Clear the EOF flag if (feof(file)) { printf("EOF still set.\n"); } else { printf("EOF cleared.\n"); } fclose(file); return 0; }

输出

以上代码产生以下结果:

<contents of example.txt>
EOF reached.
EOF cleared.

示例 2:重置流状态以重新读取

此示例读取文件内容直到到达 EOF,使用 clearerr 清除 EOF 标志,将文件倒回开头,并重新读取文件内容以表明流状态已成功重置。

#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Failed to open file"); return 1; } char ch; while ((ch = fgetc(file)) != EOF) { putchar(ch); } if (feof(file)) { printf("\nEOF reached.\n"); } clearerr(file); // Clear the EOF flag rewind(file); // Reset file position to the beginning printf("Re-reading the file:\n"); while ((ch = fgetc(file)) != EOF) { putchar(ch); } fclose(file); return 0; }

输出

执行以上代码后,我们得到以下结果:

<contents of example.txt>
EOF reached.
Re-reading the file:
<contents of example.txt>
广告