fwrite Probleme

Gast #3171617
Lesenswert?

Habe da ein Standardausleseprogramm:
1
 struct liste{
2
    char Name[NAME_MAX];
3
    long Anzahl;
4
    char Artikelnummer[ARTIKEL_MAX];
5
};
6

7
typedef struct liste EINLAUFSLISTE
8

9
int main(){
10
  
11
  EINKAUFSLISTE meineLste[10];
12
  
13
  if(eingabe == AUSGEBEN)
14
          show(&meineListe[0]); //Zeige gesamte Liste an
15
        else if(eingabe == HINZUFUEGEN)
16
             putItem(&meineListe[0]);
17
     else if(eingabe == 8)
18
             save(&meineListe[0]);//speichern
19
        else if(eingabe == 9)
20
             read(&meineListe[0]);//lese
21
}
22

23

24
void save(EINKAUFSLISTE *liste){
25
    FILE *datei;
26
    if( (datei = fopen("einkaufsliste.bin", "w")) == NULL)
27
       printf("Fehler beim oeffnen der Datei");
28
    else{
29
        //Schreibe
30
        fwrite(liste, sizeof(EINKAUFSLISTE), 10, datei);
31
        fclose(datei);
32
        printf("\nsaved!\n");
33
    }
34
}
35

36
void read(EINKAUFSLISTE *liste){
37
    FILE *datei;
38
    if((datei = fopen("einkaufsliste.bin", "r")) == NULL)
39
        printf("Fehler beim oeffnen der Datei");
40
    else{
41
        //Lese
42
        fread(liste, sizeof(EINKAUFSLISTE), 10, datei);
43
        fclose(datei);
44
        printf("\nread!\n");
45
        printList(liste);
46
    }
47
}

fwrite schreibt richtige Werte in das File, jedoch fread ließt nur das 
erste Element aus. Was simmt nicht?
Gast #3171630
Lesenswert?

Joachim Drechsel schrieb:
> Gezielt eingestreute "&" (zB VOR "liste" => "&liste" sollten
> helfen. fread/fwrite erwarten Zeiger auf die Struktur.

liste ist doch schon ein Zeiger. Schreibe ich ein & davor, dann stürzt 
es ab.

Joachim Drechsel schrieb:
> Nebenbei geben diese Funktionen auch etwas zurück was man
> testen könnte ;)

Danke. Ich habe immer einen Fehler bei fread und der Rückgabewert ist 
immer 0.
Gast #3172190
Lesenswert?

Helios schrieb:
> Martin B. schrieb:
>> hast Du auch daran gedacht, beim Öffnen zum Schreiben "wb" statt "w"
>> anzugeben?
>
> Mein Retter in der Not. Jetzt funktioniert es endlich. Unter linux
> müsste ich dann diese b's weglassen oder?

Nein. Warum denkst du, daß du das müßtest? Es ist ein binary-File, also 
gehört da ein b hin. Es ist nur so, daß es unter Linux egal ist, weil es 
dort im Gegensatz zu Windows keinen Unterschied zwischen binary- und 
Text-Modus gibt.
Also: Mit b geht's überall, ohne gehts unter Windows nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren