Ich habe erst vor kurzem angefangen, mit zu arbeiten I/O
in C
. Hier ist meine Frage –
Ich habe eine Datei, aus der ich meine Eingaben lese. Dann verwende ich fgets()
um Strings in einen Puffer zu bekommen, die ich irgendwie verwende. Was passiert nun, wenn die Eingabe zu kurz für den Puffer ist, dh wenn der erste durchgelesen wird fgets()
erreicht EOF
. Sollte fgets()
Rückkehr NULL
(wie ich gelesen habe fgets()
Dokumentation)? Es scheint, dass dies nicht der Fall ist, und ich bekomme meine Eingaben richtig. Neben sogar meine feof(input)
sagt nicht, dass wir erreicht haben EOF
.
Hier ist mein Codeschnipsel.
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");
}
Beachten Sie, dass
feof(input)
wird nur wahr zurückgeben nach versuchen Vergangenheit lesen EOF. Es sagt dir nicht, dass du es bist bei EOF.– Schleicher
10. Februar 2014 um 13:54 Uhr
Können Sie das im Kontext des obigen Beispiels erläutern? Vermuten,
fgets()
liest nur100 bytes
(BUFSIZE
ist 512), solltefgets()
RückkehrNULL
?– yadav_vi
10. Februar 2014 um 13:58 Uhr
Ok, jetzt merke ich, wie dumm mein Kommentar war; jedenfalls verstehe ich was du meinst. Wie überprüfe ich, ob EOF erreicht wurde?
– yadav_vi
10. Februar 2014 um 14:04 Uhr