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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top