Rückgabewert von fgets ()
Ich habe gerade erst angefangen mit zu arbeitenI/O
imC
. Hier ist meine Frage -
Ich habe eine Datei, aus der ich meine Eingaben lese. Dann benutze ichfgets()
um Strings in einen Puffer zu bekommen, den ich irgendwie benutze. Was passiert nun, wenn die Eingabe für den Puffer zu kurz ist, d.h.fgets()
erreichtEOF
. Solltefgets()
RückkehrNULL
(wie ich gelesen habefgets()
Dokumentation)? Es sieht so aus, als ob es nicht so ist und ich bekomme meinen Input richtig. Außerdem sogar meinfeof(input)
sagt nicht, dass wir erreicht habenEOF
.
Hier ist mein Code-Schnipsel.
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");
}