Warum ist dieser C -Code -Fehler?
-
22-09-2019 - |
Frage
An eine andere Frage, Jerry Sarg wies Folgendes auf:
Es hängt (wahrscheinlich) nicht wirklich mit Ihrer Frage zusammen, aber
while (!feof(fileptr)){
ist so ziemlich ein garantierter Fehler.
Ich dachte, ich würde eine separate Frage starten, da dieser Kommentar etwas off-topic ist. Könnte mir das jemand erklären? Dies war das erste Programm, das ich schon einmal in Straight C geschrieben habe.
Lösung
Der Grund für diese Aussage ist das feof
ist immer noch (anfangs) falsch, wenn das Ende der Datei erreicht wurde - es wird erst nach dem ersten Versuch, das Ende der Datei vorbei zu lesen.
Somit
char mychar;
while(!feof(fileptr))
{
fread(&mychar, sizeof(char), 1, fileptr);
fprintf(stderr, "The char is '%c'.\n", mychar);
}
wird einen Char zu vielen verarbeiten.
Der richtige Weg besteht darin, den Rückgabewert von zu überprüfen fread
(oder wie auch immer Sie lesen, um zu lesen) oder alternativ aufrufen feof
nach Die Funktion, die das Lesen ausübt. Zum Beispiel:
char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
fprintf(stderr, "The char is '%c'.\n", mychar);
Andere Tipps
Google findet dies: http://www.drpaulcarter.com/cs/common-c-errors.php#4.2
Es heißt: "Der Autor hat noch keinen Studenten die Feof () -Funktion korrekt verwendet!"
Zusammenfassend lässt sich sagen, dass die C -Datei funktioniert fread
und fwrite
Rückgabestatuswerte sowieso, welche Sie u003Cblink>sollte nicht ignorierenu003C/blink>. Überprüfen Sie den Wert von feof
ist eine dieser Stalltür, nachdem das Pferd bereits geflohen ist.
Die C -FAQ -Liste hat eine Antworten zusammen mit Antworten auf viele andere solcher häufig gestellten Fragen:
In C wird das Dateiende erst nach dem Versuch, das Lesen zu lesen, angezeigt und fehlgeschlagen.