Originariamente inviato da YuYevon
Non devi assegnare spazio alla struct in questo caso, ma ai suoi campi nome e cognome.
In questo modo ad esempio
codice:
persone[i].nome = (char *) malloc(sizeof(char) * 10);
assegni spazio per dieci caratteri al campo nome della struct persone[i] (stessa cosa per cognome). Chiaramente in questo modo non ha molto senso perché se devi assegnare staticamente 10 caratteri ogni volta tanto vale ricorrere all'allocazione statica, anzi in quel modo risparmieresti anche il costo della chiamata alla malloc() (e della conseguente chiamata di sistema), ma è chiaro che la cosa può essere generalizzata semplicemente chiedendo prima la lunghezza del nome per poi allocare lo spazio.
Comunque a mio avviso questi sono quei casi in cui è meglio ricorrere all'allocazione statica, tanto al più si spreca qualche byte (evitando però ogni volta l'onere della chiamata alla malloc(), che è ben peggiore).
Ho capito perfettamente il tuo ragionamento, comunque questo è solo un modo per imparare a utilizzare la malloc()
Ho provato a fare in questo modo ma non funziona, perchè ?
codice:
#include <stdio.h>
#define DEF 5
typedef struct persona
{
char *nome;
char *cognome;
int anni;
}t_persona;
int main()
{
t_persona *x;
x=(t_persona*)malloc(sizeof(t_persona));
int i;
t_persona persone[DEF];
for(i=0;i<DEF;i++)
{
scanf("%s",persone[i].nome);
scanf("%s",persone[i].cognome);
scanf("%d",&persone[i].anni);
}
for(i=0;i<DEF;i++)
{
printf("\n%s\n",persone[i].nome);
printf("%s\n",persone[i].cognome);
printf("%d\n\n",persone[i].anni);
}
}