Fehler im Programm durch fgetc() / fread()



  • Moin,

    Ich arbeite mit Dev-CPP (GUI für MinGW), um meine Programme auf Windows zu portieren. Dabei habe ich folgendes Problem: Eine meiner Bibliotheksfunktionen schreibt irgendwie nicht in die Datei. Stark vereinfacht sieht der Code so aus:

    #include <cstdlib>
    #include <cstdio>
    
    int main(void)
    {
    const char right[]="z";
    FILE* optfp = fopen("test.txt", "r+b");
    
    if(optfp == NULL) {
        puts("optfp was NULL!");
        exit(1);
    }
    
    char c;
    do { c = fgetc(optfp); } while ( c != '=' );
    
    fputs(right, optfp);
    fclose(optfp);
    }
    

    Dabei sieht die Datei "test.txt" wie folgt aus:

    a=b
    c=d
    

    Die Textdatei ist im Linux Textformat, deshalb der Modus "b" beim Öffnen. Ziel des einfachen Programms ist es, "a=b" zu "a=z" zu verändern. Die do-while-Schleife sollte dabei einfach nur so viele Bytes einlesen, bis ein "=" gelesen wird, danach das "z" schreiben. Das Lesen funktioniert dabei auch tadellos, bloss geht das Schreiben danach nicht!

    Wenn ich die do-while-Schleife durch folgende Zeile ersetze, funktioniert das Programm:

    fseek(optfp, 2, SEEK_CUR);
    

    Das ist aber keine Dauerlösung, da die Länge der Zeile variieren kann.

    Die Frage ist, warum beim ursprünglichen Code nichts geschrieben wird, wenn davor ein fget(c); oder fread(&c, 1, 1, optfp); steht.

    Hat jemand eine Idee?


Anmelden zum Antworten