[comp.std.c] Is it an error to read past end of file?

eggert@ata.twinsun.com (Paul Eggert) (10/06/90)

Is it an error to read past EOF?  For example, suppose there is just one '\n'
character left in in the stream F and we execute `C=getc(F);' three times, so
that C gets the values '\n', EOF, and EOF, respectively.  What is ferror(F)
afterwards, assuming that it started off being zero?

        C = getc(F);    assert(C=='\n' && !feof(F) && !ferror(F));
        C = getc(F);    assert(C==EOF  &&  feof(F) && !ferror(F));
        C = getc(F);    assert(C==EOF  &&  feof(F) &&      ?    );


Here is less academic example:

        char b[BUFSIZ];
        size_t n;
        while ((n  =  fread(b, sizeof(char), BUFSIZ, stdin))   !=   0)
                if (fwrite(b, sizeof(char), n, stdout) != n)
                        write_error();
        if (ferror(stdin))
                read_error();

Suppose BUFSIZ is 1024, stdin contains only 500 bytes, and the first call to
fread() yields n=500 and sets feof(stdin).  The second call to fread()
attempts to read past end of file, and yields n=0; does it also set
ferror(stdin)?