P
Das Problem in deiner Ascii war folgendes:
Durch das %s schreibst du nur die Zeichen bis \0 und nicht MAX Zeichen pro String und liest ihn dann mit MAX Zeichen ein, das kann nicht funktionieren
//schreiben
fprintf(datei,"%s %s %s %d\n",
zeiger->name,zeiger->vorname,zeiger->strasse);
zeiger=zeiger->next;
//Lesen
fgets(nam, MAX, datei);
fgets(vorn, MAX, datei);
fgets(strasse, MAX, datei);
Lösung 1 Du schreibst jeden String mit Maxlänge in die Datei, dann kannst du ihn mit deinem fgets lesen, hat aber nach dem lesen unnötige leerzeichen am Ende des Strings
#define MAX 25
fprintf(datei,"%25s%25s%25s%6d",
Lösung 2 Du schreibst jeden String mit \n in die Datei, da fgets bei \n das lesen beendet liest deine bestehende Lesesequenz die Strings aus dem File aus
#define MAX 25
fprintf(datei,"%25s%25s%25s%6d",
Lösing 3 Du Schreibst binaer,
Vorteil
kompakterer Code,
Nachteil
1 Änderungen an der Struktur erzeugen einen hohen Aufwand, da das komplette Datenfile reorganisiert werden muss.
2 es werden immer die Maximalzahl der Bytes geschrieben, das kann bei vielen Daten zu einer hohen Platzverschwendung führen, da ja die jeweiligen Einzelelemente am längst möglichen Eintrag orientiert werden müssen.