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