Witam, mam problem z zapisaniem listy do pliku i jej wczytania. Rozmiar pliku się zwiększa ale jak wczytam listę to wyskakują jakieś krzaczki ;) Jakby ktoś mógł spojrzeć byłbym bardzo wdzięczny.
Pozdrawiam
typedef struct{
char imie[50];
char nazwisko[50];
char adres[50];
int id;
}uzytkownik;
typedef struct{
uzytkownik user;
struct lista *next;}lista;
void add_u(uzytkownik temp)
{
system("cls");
lista *temp_u;
temp_u=malloc (sizeof(lista));
temp_u->next=NULL;
if (head_u==NULL)
{
temp_u->user.id=1;
head_u=temp_u;
}
else
{
lista*temp2_u;
int last_id;
temp2_u=head_u;
while (temp2_u->next!=NULL)
{
temp2_u=temp2_u->next;
}
last_id=temp2_u->user.id;
temp_u->user.id=last_id+1;
temp2_u->next=temp_u;
}
strncpy(temp_u->user.imie, temp.imie, sizeof temp_u->user.imie-1);
temp_u->user.imie[sizeof temp_u->user.imie-1] = 0;
strncpy(temp_u->user.nazwisko, temp.nazwisko, sizeof temp_u->user.nazwisko-1);
temp_u->user.nazwisko[sizeof temp_u->user.nazwisko-1] = 0;
strncpy(temp_u->user.adres, temp.adres, sizeof temp_u->user.adres-1);
temp_u->user.adres[sizeof temp_u->user.adres-1] = 0;
}
void utworz_u()
{
FILE *plik=NULL;
if (plik=fopen("data", "rb"))
{ uzytkownik temp2;
fpos_t l;
int i;
fseek(plik, 0, SEEK_END);
fgetpos(plik, &l);
l=l/sizeof(uzytkownik);
fseek(plik, 0, 0);
for (i=0; i<l; i++)
{
fread(temp2.imie, sizeof(char), 50, plik);
fread(temp2.nazwisko, sizeof(char), 50, plik);
fread(temp2.adres, sizeof(char), 50, plik);
fread(&temp2.id, sizeof(int), 1, plik);
add_u(temp2);
}
}
else
{ plik=fopen("data", "wb");}
fclose(plik);
}
void zapisz_u()
{
FILE *plik;
lista*temp_u, *temp2_u;
temp_u=head_u;
if ((plik=fopen("data","w"))==NULL) // próba otwarcia pliku
printf ("Blad otwarcia pliku");
else{
while (temp_u != NULL)
{
fwrite(&temp_u,sizeof(uzytkownik),1,plik);
temp2_u=temp_u;
temp_u = temp_u->next; /* przesuwamy head aż znajdziemy ostatni element */
}
}
}
}