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:
Nel file ci saranno elementi ordinati separati da newline,ecco un esempio:codice:typedef struct { int data [4]; char *oggetto; char *testo; }nota;
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.codice:4 4 4 4 ciao ciao
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:
Se nel main provo a scrivere: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; }
Mi stampa un numero negativo,cosa potrebbe essere?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; }

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando