?
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;
}