C clearerr() function

C library function - clearerr()

The clearerr() function is used to clear the end-of-file and error indicators for the stream to which stream points.


void clearerr(FILE *stream)

clearerr() Parameters:

Name Description Required /Optional
stream Identifies an address for a file descriptor, which is an area of memory associated with an input or output stream. Required

Return value from clearerr()

  • The clearerr() function shall not return a value.

Example: clearerr() function

The following program opens an existing file called test.txt for reading. As the file opens in reading mode so it will not allow to write anything in it, so when fputc() function try to write some text ferror() function will display an error message. This error, however, is cleared using the clearerr() function. Therefore, the next time the ferror() function performs an error check, it displays that no errors have been detected.

#include <stdio.h>

int main ()
  FILE * fp;
  fp = fopen("test.txt","r");

  if (fp == NULL) perror ("Error opening file.");
  else {
    fputc('abcd', fp);

      printf("Error writing to test.txt.\n");


    if (!ferror(fp))
      printf("No error reading test.txt.\n"); 


  return 0;


Error writing to test.txt.
No error reading test.txt.

Assuming we have a text file file.txt, which is an empty file, let us compile and run the above program, this will produce the following result because we try to read a file which we opened in write only mode.

C Programming Code Editor:

Previous C Programming: C fclose()
Next C Programming: C feof()

Share this Tutorial / Exercise on : Facebook and Twitter

C Programming: Tips of the Day

What's an object file in C?

An object file is the real output from the compilation phase. It's mostly machine code, but has info that allows a linker to see what symbols are in it as well as symbols it requires in order to work. (For reference, "symbols" are basically names of global objects, functions, etc.)

A linker takes all these object files and combines them to form one executable (assuming that it can, i.e.: that there aren't any duplicate or undefined symbols). A lot of compilers will do this for you (read: they run the linker on their own) if you don't tell them to "just compile" using command-line options. (-c is a common "just compile; don't link" option.)

Ref : https://bit.ly/3CbzF8M