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?