[gelöst] Problem mit fread



  • Hallo
    Ich habe zu Testzwecken ein kleines Programm geschrieben, das eine Datei einlesen, ausgeben und dann mit neuem Inhalt füllen soll.
    Das ganze soll mit fread und fwrite realisiert werden, da ich es in ein anderes Programm einbauen möchte und dieses unformatierte Lese/Schreibfunktionen benötigt.
    Hier der Quellcode:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main (int argc,char *argv[]){
    	FILE *file = fopen("test","w+");
    	char buf[1024];
    	fread(buf,1024,1,file);
    	printf("[DEBUG] buf: %s\n",buf);
    	printf("[DEBUG] strlen buf: %d\n",strlen(buf));
    	char *buf2 = "Test123";
    	fseek(file, SEEK_SET, 0);
    	fwrite(buf2,strlen(buf2),1,file);
    	fclose(file);
    	return 0;
    }
    

    Das Beschreiben funktioniert, das Einlesen aber NICHT!
    Kann mir jemand meinen Fehler zeigen?
    Ich finde ihn einfach nicht.



  • Auszug aus der Standardbibliothek für FILE *fopen(...):

    [...]
    "w+" create text file for update; discard previous contents if any
    [...]
    Update mode permits reading and writing the same file;[...]

    Anstelle von

    FILE *file = fopen("test","w+");
    

    wirst du die Datei mit

    FILE *file = fopen("test","r+");
    

    öffnen müssen, da dies nach der Standardbibliothek

    [...]"r+" open text file for update (i.e.; reading and writing)[...]

    ermöglicht.



  • fread terminiert nicht.
    du musst deinen puffer 'buf' nullterminieren, jung.



  • dxx255 schrieb:

    Kann mir jemand meinen Fehler zeigen?

    w+ erstellt ne neue datei oder wenn eine datei gleichen namens existiert wird der inhalt gelöscht.



  • Danke für die schnelle Antwort.
    Mit r+ klappts!



  • x948657y3q455z schrieb:

    fread terminiert nicht.
    du musst deinen puffer 'buf' nullterminieren, jung.

    Wenn du dies nicht beachtest, wird dein Programm irgendwann Mist machen.


Log in to reply