Salve a tutti,ho questo dubbio su una funzione che è allo stesso tempo una procedura ma ha anche un valore di ritorno.
Ho scritto una funzione che legge una struttura da file,la struttura è questa:
codice:
typedef struct
{
int data [4];
char *oggetto;
char *testo;
}nota;
Nel file ci saranno elementi ordinati separati da newline,ecco un esempio:
codice:
4
4
4
4
ciao
ciao
Questa funzione deve leggere i valori dal file,allocare n strutture e ogni struttura contiene i valori letti da file.Ad esempio se nel file ci sono 12 righe+1 (significa che ci sono scritte 2 strutture),alloca 2 strutture e ritorna come valore il numero di strutture allocate.
Ho testato la funzione,e pare che se all' interno della funzione provo a stampare tutti i valori letti me li stampa pure,ma se provo a farlo all' interno del main mi stampa numeri casuali grandissimi.
Sembrerebbe che anche se ha l' effetto di allocare n strutture già contenenti valori,quest' effetto non viene prodotto.
Questo è il codice della funzione:
codice:
int nota_read(FILE*fp,nota *ptr)
{
char *p;
int i,k=0;
if(num_line(fp)==0)
ptr=NULL;
else
ptr=(nota*)calloc((num_line(fp)/6),sizeof(nota));
while(cur_line(fp)<num_line(fp))
{
for(i=0;i<4;i++)
{
p=get_string(fp,p);
(ptr[k]).data[i]=atoi(p);
free(p);
}
(ptr[k]).oggetto=get_string(fp,(ptr[k]).oggetto);
(ptr[k]).testo=get_string(fp,(ptr[k]).testo);
k++;
}
free(p);
return num_line(fp)/6;
}
Se nel main provo a scrivere:
codice:
int main()
{
nota *ptr;
FILE *fp;
fp=fopen("dati.txt","r");
nota_read(fp,ptr);
printf("%d",ptr[0].data[0]); // e' un esempio per testare la funzione;
fclose(fp);
free(ptr);
return 0;
}
Mi stampa un numero negativo,cosa potrebbe essere?