Tablice struktur oraz dynamiczne alokowanie ich

0

Czy mógłby mi ktoś wytłumaczyc w jaki sposób moge utworzyc tablice struktur i jak ją uzupełnic dynamicznie?

#include <stdlib.h>

struct osoba{
	char* imie[10];
	char nazwisko[25];
	float wzrost;
	float waga;
};

int main(){
	
int zakres1=10;
int zakres2=20;
int liczba;

struct osoba tab[zakres1];

tab = malloc(zakres1 * sizeof(*tab));

printf("podaj liczbe osob ktore chcesz dodac\n");
scanf("%d",liczba);

if(liczba>zakres1){
	tab = realloc(tab, zakres2 * sizeof(*tab));
   }
for(int i=0;i<zakres1;i++){
	printf("podaj imie");
	scanf("%s",&tab.imie);
	printf("podaj nazwisko");
	scanf("%s",&tab.nazwisko);
	printf("podaj wage");
	scanf("%f",&tab.waga);
	printf("podaj wzrost");
	scanf("%f",&tab.wzrost);	
 }
 for(int i=0;i<zakres1;i++){
 	printf("%s\n %s\n %.2f\n %.2f\n",tab.imie,tab.nazwisko,tab.waga,tab.wzrost);
 }
 return 0;
}
jak widac moje próby z poradnikami z yt zakonczyły sie nie powodzeniami :/
5

Trzeba było najpierw spróbować z dynamiczną tablicą liczb, zasada ta sama. Przede wszystkim musisz rozróżnić kiedy alokujesz na stosie, a kiedy na stercie, jeśli chcesz mieć możliwość dynamicznej zmiany interesuje Cię ten drugi sposób. W swoim kodzie próbujesz użyc obydwu sposobów naraz

struct osoba tab[zakres1]; // stos

tab = malloc(zakres1 * sizeof(*tab)); // sterta

Do tego pamiętaj, że malloc zwracaj Ci void* więc musisz zrzutować zwrócony wskaźnik na swój typ.

Poza tym nie wiem czy masz świadomość, że w tym miejscu char* imie[10]; deklarujesz tablicę dziesięciu napisów i dla każdego z osobna musisz zaalokować dodatkową pamięć. Biorą pod uwagę jak zadeklarowałeś kolejne pole pewnie chodziło Ci o coś takiego char imie[10];

1 użytkowników online, w tym zalogowanych: 0, gości: 1