Ciao, ho un problema sul seguente programma che ho realizzato per caricare dei dati da file CSV all'interno di un array di struct (un array di utenti caratterizzati da nome, cognome e anno di nascita)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_SIZE 15
#define SURNAME_SIZE 15
#define BUFFER_SIZE 1048
typedef struct{
char nome[NAME_SIZE];
char cognome[SURNAME_SIZE];
int anno;
}Utente;
int caricaDatiDaFile(FILE*, Utente *utenti); //ritorna il numero di utenti caricati da file CSV, passo l'array di utenti per riferimento
int main()
{
FILE *file;
Utente *utenti;
if( (file=fopen("nomi.csv", "r")) == NULL ){
puts("Errore nell'apertura del file da leggere\n");
}else{
caricaDatiDaFile(file, utenti);
}
puts(utenti[1].cognome); //stampa di prova (non stampa nulla, stampa solo all'interno della funzione
fclose(file);
return 0;
}
int caricaDatiDaFile(FILE *file, Utente *utenti){
utenti = calloc(1, sizeof(Utente)); //allocazione dinamica
char *nome, *cognome, *anno_t;
char buffer[BUFFER_SIZE];
int anno, i = 0;
while(fgets(buffer, BUFFER_SIZE, file) != NULL){ //parsificazione del file csv per ottenere i singoli campi (nome, cognome e anno di nascita)
nome = strtok(buffer, ";");
cognome = strtok(NULL, ";");
anno_t = strtok(NULL, ";");
anno = atoi(anno_t);
strcpy(utenti[i].nome, nome);
strcpy(utenti[i].cognome, cognome);
utenti[i].anno = anno;
i++;
utenti = realloc(utenti, (i+1) * sizeof(Utente));
}
printf("Utenti caricati: %d\n", i);
puts(utenti[1].cognome); //stampa di prova (funziona correttamente, nessun problema nella lettura del file csv
return i;
}
quando provo a stampare un utente all'interno della funzione, tutto ok, ma se provo fuori dalla funzione, niente da fare. Ho sicuramente sbagliato il passaggio dell'array per riferimento, ma non riesco a capire cosa e ci sto sbattendo da giorni, grazie mille in anticipo