I have just recently started working with I/O
in C
. Here is my question -
I have a file, from which I read my input. Then I use fgets()
to get strings in a buffer which I utilise in some way. Now, what happens if the input is too short for the buffer i.e. if the first read by fgets()
reaches EOF
. Should fgets()
return NULL
(as I have read in fgets()
documentation)? It seems that it doesn't and I get my input properly. Besides even my feof(input)
does not say that we have reached EOF
.
Here is my code snippet.
char buf[BUFSIZ];
FILE *input,
*output;
input = fopen(argv[--argc], "r");
output = fopen(argv[--argc], "w");
/**
* If either of the input or output were unable to be opened
* we exit
*/
if (input == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 1]);
exit(EXIT_FAILURE);
}
if (output == NULL) {
fprintf(stdout, "Failed to open file - %s.\n", argv[argc + 0]);
exit(EXIT_FAILURE);
}
if (fgets(buf, sizeof(buf), input) != NULL) {
....
}
/**
* After the fgets() condition exits it is because, either -
* 1) The EOF was reached.
* 2) There is a read error.
*/
if (feof(input)) {
fprintf(stdout, "Reached EOF.\n");
}
else if (ferror(input)) {
fprintf(stdout, "Error while reading the file.\n");
}
feof(input)
will only return true after attempting to read past EOF. It doesn't tell you that you are at EOF. – Oodlesfgets()
reads only100 bytes
(BUFSIZE
is 512), shouldfgets()
returnNULL
? – Credendum