In various examples found on the web fgetc()
is used like this:
FILE *fp = fopen(PATH, "r");
if (fp == NULL) {
perror("main");
exit(EXIT_FAILURE);
}
int ch;
while (ch = fgetc(fp) != EOF) {
// do something
}
But according to the manpage to fgetc()
If a read error occurs, the error indicator for the stream shall be set, fgetc() shall return EOF, [CX] and shall set errno to indicate the error.
So need I check this too? And how?
This is what the specs say:
the fgetc() function shall obtain the next byte as an unsigned char converted to an int
The following macro name shall be defined as a negative integer constant expression: EOF
As long as you store the return value in an int
and not a char
, it is sufficient to check for EOF
because it is guaranteed not to represent a valid character value.
Also, in your code, this:
while (ch = fgetc(fp) != EOF)
should be:
while ((ch = fgetc(fp)) != EOF)
The additional parentheses are required because !=
has higher precedence than =
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With