Seite 1 von 1
struct in Datei schreiben / aus Datei lesen
Verfasst: Sa Aug 22, 2009 11:45 pm
von +Fuss+
Hallo,
bin gerade an einem größeren Projekt und habe Probleme dabei einen struct in eine Datei zu schreiben (lesen bringt noch nichts, weil ich noch nicht geschrieben habe).
Ich habe mal einen ganz einfachen Code geschrieben und sogar dabei gibt der gcc Fehler aus:
Code: Alles auswählen
#include <stdio.h>
struct structtest {
int title;
int number;
} Mystruct;
int main(void)
{
FILE *file = fopen("/home/dennis/test.test", "w");
Mystruct.title = 1;
Mystruct.number = 0;
fwrite(Mystruct, sizeof(struct structtest), 1, file);
fclose(file);
return 0;
}
Dabei bekomme ich diese Fehlermeldung: write.c:17: Fehler: Inkompatibler Typ für Argument 1 von »fwrite«
Ich wüsste jetzt wie ich den Fehler beheben kann (habe auch schon viel rumprobiert

) Aber mir wäre es wichtiger zu verstehen warum dieser Fehler kommt...
MfG Fuss
Re: struct in Datei schreiben / aus Datei lesen
Verfasst: So Aug 23, 2009 12:04 am
von nufan
Wenn du in der Referenz nachguckst, wirst du folgendes finden:
Code: Alles auswählen
size_t fwrite (const void * ptr, size_t size, size_t count, FILE * stream );
Und jetzt guck dir deine Fehlermeldung an. Beim 1. Argument passt der Typ nicht. Typen vergleichen... Das 1. Argument muss ein Pointer sein, also musst du eine Adresse übergeben. Damit solltest du jetzt selbst auf die Lösung kommen. Einfach mal lesen was der Compiler sagt, das ist meistens nichts falsches

Außerdem legst du mit "Mystruct" eine globale Struktur an, was du so gut es geht vermeiden solltest. Und in deinem Fall ist es eindeutig vermeidbar

Re: struct in Datei schreiben / aus Datei lesen
Verfasst: So Aug 23, 2009 11:29 am
von +Fuss+
Erstmal danke! Das mit dem Zeiger hatte ich übersehen, aber mittlerweile klappt das Lesen und Schreiben!
Bin mir nicht sicher ob das die einfachste Methode ist aber es funktioniert
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
struct structtest {
char title[32];
int number;
} Mystruct[1];
int main(void)
{
FILE *file = fopen("/home/dennis/test.test", "w");
int write = 0;
strcpy(Mystruct[0].title, "Test");
Mystruct[0].number = 1;
write = fwrite(Mystruct, sizeof(struct structtest), 1, file);
if(write != 1)
printf("Fehler beim Schreiben!\n");
else
printf("Erfolgreich geschrieben!\n");
fclose(file);
return 0;
}
Code: Alles auswählen
#include <stdio.h>
struct structtest {
char title[32];
int number;
} Mystruct[1];
int main (void)
{
FILE *file = fopen("/home/dennis/test.test", "r");
int read = 0;
read = fread(Mystruct, sizeof(struct structtest), 1, file);
if(read != 1)
printf("Fehler beim Lesen!\n");
else
{
printf("Erfolgreich gelesen!\n");
printf("Titel: %s, Nummer: %d\n", Mystruct[0].title, Mystruct[0].number);
}
return 0;
}
Das mit der globalen Variable weiß ich, ist aber in dem größeren Programm
bin gerade an einem größeren Projekt und habe Probleme dabei einen struct in eine Datei zu schreiben
leider nicht vermeidbar, da die Gtk-Callbacks nicht viele Parameter weiterleiten können.
MfG Fuss
Re: struct in Datei schreiben / aus Datei lesen
Verfasst: So Aug 23, 2009 11:41 am
von nufan
+Fuss+ hat geschrieben:Bin mir nicht sicher ob das die einfachste Methode ist aber es funktioniert
Du erstellst einen Array mit 1 Element... das ist wirklich nicht notwendig. Lieber den Adressoperator '&' verwenden.
Ich würds so machen:
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
struct structtest {
char title[32];
int number;
};
struct structtest Mystruct;
int main(void)
{
FILE *file = fopen("/home/dennis/test.test", "w");
int write = 0;
strcpy(Mystruct.title, "Test");
Mystruct.number = 1;
write = fwrite(&Mystruct, sizeof(struct structtest), 1, file);
if(write != 1)
printf("Fehler beim Schreiben!\n");
else
printf("Erfolgreich geschrieben!\n");
fclose(file);
return 0;
}
Das aufs Lesen umzuschreiben sollte kein Problem sein.
Zusätzlich solltest du noch "file" prüfen, ob die Datei auch korrekt geöffnet/erstellt wurde.
+Fuss+ hat geschrieben:Das mit der globalen Variable weiß ich, ist aber in dem größeren Programm
bin gerade an einem größeren Projekt und habe Probleme dabei einen struct in eine Datei zu schreiben
leider nicht vermeidbar, da die Gtk-Callbacks nicht viele Parameter weiterleiten können.
Solange das nicht ausartet...
Re: struct in Datei schreiben / aus Datei lesen
Verfasst: So Aug 23, 2009 6:46 pm
von Xin
+Fuss+ hat geschrieben:Das mit der globalen Variable weiß ich, ist aber in dem größeren Programm
bin gerade an einem größeren Projekt und habe Probleme dabei einen struct in eine Datei zu schreiben
leider nicht vermeidbar, da die Gtk-Callbacks nicht viele Parameter weiterleiten können.
Das rechtfertigt eine Struktur, aber wo ist das Problem, dass eine globale Variable rechtfertigt?