Grazie per la spiegazione oregon....Sono riuscito a risolvere il problema.
Sto utilizzando lo stesso codice con un altra struct ma non riesce il caricamento errore: "Segmentation fault"; il codice è si può dire preciso eccoli:
codice:
typedef struct studente
{
char *nome;//[200];
char *cognome;//[200];
int matricola;
char *iscrizione;//[200];
} Studente;
Studente* caricamento(char *nomefile, int *dim)
{
FILE *fp; Studente *s; int i;
fp=fopen(nomefile, "r");
if(fp==NULL)
{ perror(nomefile);
*dim=-1; return NULL;
}
if(fscanf(fp,"%d",dim)!=1)
{
perror(nomefile);
*dim=-1; return NULL;
}
s=(Studente *) calloc(*dim, sizeof(Studente));
for(i=0;i<*dim;i++){
s[i].nome=(char *) malloc(MAXLENGTH*sizeof(char));
s[i].cognome=(char *) malloc(MAXLENGTH*sizeof(char));
s[i].iscrizione=(char *) malloc(MAXLENGTH*sizeof(char));
if(fscanf(fp,"%s %s %d %s",s[i].nome, s[i].cognome, &s[i].matricola, s[i].iscrizione)!=4)
{
perror(nomefile);
*dim=-1; return NULL;
}
}
fclose(fp);
return s;
}
int main(void)
{
Studente *s;
int dim, i;
s=caricamento("studenti.txt",&dim);
// sort(s,dim);
for(i=0; i<dim; i++)
printf("%s %s %d %s",s[i].nome, s[i].cognome, s[i].matricola, s[i].iscrizione);
return 0;
}
codice:
typedef struct oggetto
{
char *fornitore;
double prezzo;
int codice;
int quantita;
} OGGETTO;
OGGETTO* caricamento(char *nomefile, int *dim)
{
FILE *fp; OGGETTO *v; int i;
fp=fopen(nomefile, "r");
if(fp==NULL){
perror(nomefile);
*dim=-1;
return NULL;
}
if(fscanf(fp,"%d",dim)!=1){
perror(nomefile);
*dim=-1;
return NULL;
}
v=(OGGETTO *) calloc(*dim, sizeof(OGGETTO));
for(i=0; i< *dim; i++)
{
v[i].fornitore=(char *) malloc(MAXLENGHT*sizeof(OGGETTO));
if(fscanf(fp,"%s %lf %d %d",v[i].fornitore, &v[i].prezzo, &v[i].codice, &v[i].quantita)!=4);
{perror(nomefile); *dim=-1; return NULL;}
}
fclose(fp);
return v;
}
int main(int argc, char** argv) {
OGGETTO *v; int *dim, i;
v=caricamento("magazzino.txt",dim);
/*for(i=0; i<dim; i++)
printf("%s %lf %d %d", v[i].fornitore, v[i].prezzo, v[i].codice, v[i].quantita);
*/return (EXIT_SUCCESS);
}
Il primo blocco funziona; il secondo no...non riesco a vedere nessuna differenza e quindi il motivo per cui uno parta e l'altro no....grazie in anticipo.