Stream di un file csv, strtok problema

di Anonimizzato26377 il
3 risposte
Ho un file csv in cui nel primo campo è contenuto il nome del comune nel secondo il numero degli abitanti, ho un problema per il salvataggio del file in un array di strutture:
typedef struct {
			char nomecomune[30];
			int popolazione;
		} dato ;
 dato dati[ARRAY_MAX];
		char buf[30];
		char *token;
		char *res;
		char appoggio[30];
		int i=0;
	
		FILE *fp;
		fp = fopen("Elenco-comuni-italiani.csv", "r");
		printf("sto aprendo il file\n");
		while (!feof(fp))
		{
			res=fgets(buf, 100, fp);
			token=strtok(buf,";");
			strcpy(dati[i].nomecomune, token);
			
			
			

		}
dopo questo punto non so continuare
fp è il nome dello stream.
dati il nome dell'array di strutture, manca il campo popolazione della struttura da riempire

3 Risposte

  • Per cominciare, perché se il tuo spazio di memorizzazione è di 30 byte chiami fgets() con una "capienza" massima di 100 bytes? Rischi lo "sfondamento" dell'array!

    char buf[30];
    fgets(buf, 100, fp);

    Piuttosto...

    char buf[30];
    fgets(buf, 30, fp);

    Oppure...

    char buf[100];
    fgets(buf, 100, fp);
  • Si scusami, non me ne ero accorto.
  • Perché ti scusi, mica hai ucciso qualcuno!

    Usa ancora strtok(), quindi sscanf().
    Ti consiglierei anche di usare strncpy(), non strcpy.
    Controlla anche il resto, che mi sa che ti è "scappato" qualcosa, e attento ai sempre possibili "sfondamenti".
Devi accedere o registrarti per scrivere nel forum
3 risposte