C 库 - clearerr() 函数



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

语法

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

void clearerr(FILE *stream);

参数

此函数仅接受一个参数:

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

返回值

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>
广告

© . All rights reserved.