Datei über EOF hinaus auslesen



  • Hi,

    ich habe eine Aufgabe, in der unter anderem gefordert wird, eine Text-Datei zu öffnen und mit dessen Inhalt dann weitere Operationen durchzuführen. Allerdings scheitere ich schon bei der Eingabe, da die Datei überwiegend kryptische Zeichenketten enthält, die anscheinend zum Teil auch aus den EOF-Charactern bestehen. D.h. beim auslesen der Datei wird immer an diesen Stellen abgebrochen. Auch ein missachten von EOF führt zu keinem Ergebnis.
    Mit selbst erstellten Textdateien funktioniert alles einwandfrei, auch die anschließenden Operationen auf den Inhalt der Datei.

    Mein Code sieht in etwa folgendermaßen aus:

    FILE *datei;
    
    void openFile(char *filename) {
    	datei = fopen(filename, "r");
    	if(datei == NULL) {
    		printf("Konnte %s nicht öffnen!\n", filename);
    	}
    }
    
    void read_char(FILE *stream, char *out, int length) {
    	int c;
    	} else {
    		int i;
    		for( i=0; i < length; i++ ) {
    			if(feof(stream) != 0) break;
    			c = fgetc(stream);
    			*out++ = c;
    		}
    	}
    	*out = 0;
    }
    

    Wenn ich Zeile 15 auskommentiere führt es entweder bei zu großem Wert von length zu einem Programmabsturz oder es werden ab der "Problemstelle" nur noch "ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ" ausgegeben. Das Problem tritt sowohl unter Windows als auch unter Linux auf.

    Die besagte Datei kann man ggf. hier finden.
    Ich würde mich freuen, falls mir jemand mit einer Idee weiter helfen könnte.

    Vielen Dank im Voraus.
    Gruß, sacrator



  • Was macht denn das else in Zeile 12?

    Zeh Mau



  • Vielleicht solltest du die Datei im Binärmodus öffnen?

    Zeh Mau



  • Huch sorry, hatte etwas rausgelöscht, damits übersichtlicher wird. Das else kommt dann natürlich auch noch weg.

    Mit dem Binärmodus funktioniert es aber 🙂 Na endlich, vielen Dank!



  • sacrator schrieb:

    Huch sorry, hatte etwas rausgelöscht, damits übersichtlicher wird. Das else kommt dann natürlich auch noch weg.

    Mit dem Binärmodus funktioniert es aber 🙂 Na endlich, vielen Dank!

    Gerne !


Anmelden zum Antworten