wie speichere ich ein struct array und lese dies dann wieder ein?



  • hi
    möglicherweise nur für arrays

    #define array_length(x) (sizeof(x)/sizeof(x[0]))
    


  • SG1 schrieb:

    Du ermittelst sie gar nicht. Du kennst sie. Schliesslich legst Du den Speicherbereich irgendwo an.

    ja aber machmal kann doch nur eine zahl, manchmal aber auch mehrer zahlen darin stehen, zB daten[1].tag=28;

    Jetzt hab ich mal versucht die datei zu öffnen....doch er gibt mir ewig lang nur "0" aus.



  • Und, funzt? Falls noch nicht, hier hast du ein funktionierendes Beispiel:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define STRLEN_MAX 256
    
    #define READ 0
    #define SAVE 1
    
    struct Haus
    {
    	char name[STRLEN_MAX+1];
    	int nr;
    };
    
    void show ( struct Haus* p, size_t n )
    {
    	size_t i = 0;
    	while ( i<n )
    	{
    		printf("Name: %s Nummer: %d\n", p[i].name, p[i].nr );
    		i++;
    	}
    }
    
    int file_in_out ( FILE* fp, struct Haus* p, size_t n, int action )
    {
    	if ( fp == 0 )
    		return 1;
    	switch (action)
    	{
    		case READ:
    			if ( n != fread ( p, sizeof *p, n, fp ))
    				return 1;
    		break;
    
    		case SAVE:
    			if ( n != fwrite ( p, sizeof *p, n, fp ))
    				return 1;
    		break;
    	}
    	return 0;
    }
    
    int eret(char* e)
    {
    	if(e)
    		puts(e);
    	fcloseall();
    }
    
    int main()
    {
    	// Zeiger auf Datei.
    	FILE* fp = NULL;
    	// Dateiname.
    	char* filename = "haus.dat";
    	// Anzahl der Strukturen.
    	enum {n=2};
    	// Ein Strukturarray mit 2 Elementen definieren und alle Elemente mit 0
    	// initialisieren.
    	struct Haus H[n] = {0}; 
    	// Den Elementen der ersten Struktur einen Inhalt geben.
    	strncpy(H[0].name,"Haus von Nikolaus",STRLEN_MAX);
    	H[0].nr = 1;
    	// Den Elementen der zweiten Struktur einen Inhalt geben.
    	strncpy(H[1].name,"Pfefferkuchenhaus",STRLEN_MAX);
    	H[1].nr = 2;
    	// Datei erstellen
    	if ( NULL == ( fp = fopen ( filename, "wb" )))
    		return eret(strerror(errno));
    	// Strukturen speichern
    	if ( 0 != file_in_out ( fp, H, n, SAVE ))
    		return eret(strerror(errno));
    	// Datei schliessen
    	fclose(fp);
    	// Datei öffnen
    	if ( NULL == ( fp = fopen ( filename, "rb" )))
    		return eret(strerror(errno));
    	// Strukturen einlesen
    	if ( 0 != file_in_out ( fp, H, n, READ ))
    		return eret(strerror(errno));
    	// Datei schliessen
    	fclose(fp);
    	// Inhalt der Strukturen anzeigen.
    	show(H, n);
    	return 0;
    }
    

Anmelden zum Antworten