Cześć, dostałam za zadanie napisać funkcję, która umożliwi odczyt z pliku binarnego, zaalokuje tablicę wskazywaną przez *osoby, wypełni ją wczytanymi danymi oraz zapisze liczbę wczytanych rekordów w zmiennej *n. Poniżej przesyłam kod, którego nie umiem skończyć, wysypuje się niestety. Byłabym ogromnie wdzięczna za jakiekolwiek wskazówki. Pozdrawiam serdecznie ! Może jeszcze w skrócie aby wypełnić tablicę wskazywaną przez *osoby pobierałam oddzielnie wiek jak i imię dlatego korzystałam z funkcji strtok, która wyodrębniała mi te dane, gdyż wiek i imię są rozdzielone spacją.
typedef struct
{
int wiek;
char* imie;
}Osoba;
void zapisz(Osoba* osoby, int n) // funkcja umożliwia zapis do pliku binarnego wszystkich informacji zawartych w tablicy osoby, rozmiar tablicy wynosi n
{
FILE *zapis = fopen("plik.bin", "wb");
if (zapis == NULL)
{
printf("Nie ma takiego pliku");
return;
}
fprintf(zapis, "%i\n", n);
for (int i = 0; i < n; i++)
{
fprintf(zapis, "%i %s\n", osoby[i].wiek, osoby[i].imie);
}
fclose(zapis);
}
void wczytaj(Osoba** osoby, int* n)
{
char bufor[TAB];
size_t len = 0;
size_t liczbaZnakow;
int licznikWierszy = 0;
int rozmiarTablicy = 0;
FILE* plik = fopen("plik.bin", "rb");
if (plik == NULL)
exit(EXIT_FAILURE);
while (fgets(bufor, 1024, (FILE*)plik)) {
printf("%s", bufor);
//osoba->imie = "witek";
//osoba->wiek = 9;
char tab[100][STR_LEN + 100] = { { 0 } }; //tablica napisow
char * token;
char* sep = " ";
int licznik_slow = 0;
int n = 0;
token = strtok(bufor, sep);
while (token != NULL && n < TAB_LEN)
{
//printf("token: %s\n", token);
++n;
strncpy(tab[n - 1], token, STR_LEN+100);
token = strtok(0, sep);
}
if (licznikWierszy == 0) {
rozmiarTablicy = atoi(bufor);
}
else
{
Osoba* osoba = malloc(n * sizeof(char)*sizeof(int));
osoba->wiek = atoi(tab[0]);
osoba->imie = tab[1];
osoby[licznikWierszy] = osoba;
printf("PO ROZDZIELENIU: wiek:%s imie:%s\n", tab[0], tab[1]);
}
licznikWierszy++;
}
fclose(plik);
*n = rozmiarTablicy;
}
void zad3()
{
Osoba tablica[5] = { { 5, "Asia" } , { 18, "Marcin" }, { 20, "Aneta" }, { 15, "Karolina" }, { 18, "Piotr" }
};
int liczba_rekordow=0;
Osoba** wczytane_osoby = malloc(6 * sizeof(Osoba));
//zapisz(tablica, 5);
wczytaj(wczytane_osoby, &liczba_rekordow);
}