struct in Datei schreiben / aus Datei lesen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

struct in Datei schreiben / aus Datei lesen

Beitrag von +Fuss+ » Sa Aug 22, 2009 11:45 pm

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 :D ) Aber mir wäre es wichtiger zu verstehen warum dieser Fehler kommt...

MfG Fuss

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: struct in Datei schreiben / aus Datei lesen

Beitrag von nufan » So Aug 23, 2009 12:04 am

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 :)

Benutzeravatar
+Fuss+
Beiträge: 385
Registriert: Fr Nov 14, 2008 8:16 pm

Re: struct in Datei schreiben / aus Datei lesen

Beitrag von +Fuss+ » So Aug 23, 2009 11:29 am

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 :roll:

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

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: struct in Datei schreiben / aus Datei lesen

Beitrag von nufan » So Aug 23, 2009 11:41 am

+Fuss+ hat geschrieben:Bin mir nicht sicher ob das die einfachste Methode ist aber es funktioniert :roll:
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...

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: struct in Datei schreiben / aus Datei lesen

Beitrag von Xin » So Aug 23, 2009 6:46 pm

+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?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten