fwrite/fread schreibt/liest vor allem so ziemlich direkt in eine Datei, d. h. unformatiert. Öffnet man eine formatiert geschriebene Datei (fprintf) z. B. mit Notepad, kann man alles im Klartext lesen, bei einer unformatierten (fread) eben nicht. Beispielsweise werden Zahlen nicht in Text konvertiert und sehen dann in einem Texteditor entsprechend geschrottet aus.
Mal ein Beispiel, wo noch nicht geschrottet wird:
Code:
FILE *f;
f = fopen("C:\\file.txt", "w+");
int x = 0x44434241;
// so, hier wird erstmal die Adresse der Variablen übergeben,
// dann die Größe der Variablen (sizeof (variable)),
// dann die Anzahl, wie oft geschrieben werden soll,
// dann die Datei
fwrite (&x, sizeof (x), 1, f);
fclose (f);
Wenn du jetzt in die Datei lunst, siehst du (was ein Zufall) 'ABCD', denn die Variable mit Hex 0x44434241 sieht binär in etwa so aus (hoffe ich)...
Code:
01000001 01000010 01000011 01000100
---65--- ---66--- ---67--- ---68---
Und 65, 66, 67, 68 im ASCII macht 'ABCD'. Der Texteditor versteht ASCII ganz gut und zeigt entsprechend diese Buchstaben an.
Nimmst du jetzt mal irgendeine andere Zahl für x, sieht du eben höchstwahrscheinlich Schrott, weil das im Editor als Text interpretiert wird, was in diesem Fall natürlich schwachsinning ist, da die Variable (4 Bytes) ja direkt in der Datei steht, nicht als String. Es werden also mehr oder weniger unvorhersehbar Zeichen aus dem ASCII-Code ausgespuckt.
Zum Lesen also fread verwenden, ganz analog zu fwrite. Der Wert wird direkt aus der Datei ohne jegliche Konvertierung in eine Variable geschrieben.
fwrite/fread also wirklich nur zum Speichern von Dateien, die das eigene Programm verwalten soll.
fprintf etc. dann für echte "Ausgaben", die man extern lesen kann.
(Alles mit Vorbehalt)
MfG
randomize