Erreur de segmentation sur une fonction pour découper des informations
ArionSH
-
NHenry Messages postés 15219 Date d'inscription Statut Modérateur Dernière intervention -
NHenry Messages postés 15219 Date d'inscription Statut Modérateur Dernière intervention -
Bonsoir, j'ai à fonction pour découper des infos pour un projet, j'ai actuellement une erreur de segmentation, je sais d'où vient le problème mais je ne sais pas du tout comment le régler il se trouve que dans ma fonction je ne lis la pas ligne du fichier, mon tableau de caractère est donc vide,(petite précision mon string est défini!!!),
Merci d'avances
Merci d'avances
int Token(int lg, string fichier) { int i = 0, j; FILE *file = fopen("fr-esr-sise-effectifs-d-etudiants-inscrits-esr-public.csv", "r"); if (file != NULL) { string line; char* s = strdup(line); // on met dans s la CHAINE à découper ... char* val = strsep(&s,";"); // on récupère le premier token dans val while(val!=NULL && i <= lg ){ // tant qu’il reste un token for (j = 1; j < 85; j++) { printf("i=%d |j=%d",i, j); if(j==17) strcpy(tab[i].SEXE,val); if(j==37) strcpy(tab[i].DIPLOME, val); if(j==44) tab[i].DISCIPLINE = atoi(val); if(j==51) tab[i].VILLE = atoi(val); if(j==78) tab[i].EFFECTIF_TOTAL=atoi(val); // traitement du token stocké dans val val = strsep(&s,";"); // récupération du token suivan } i++; } fclose(file); } }
A voir également:
- Erreur de segmentation sur une fonction pour découper des informations
- Fonction si et - Guide
- Comment découper un pdf - Guide
- Entrer les informations d'identification reseau - Guide
- Découper mp4 - Guide
- Découper mp3 - Guide
1 réponse
Je n'ai pas bien compris à quoi servent tout ces nombre magiques (85, 17, 37, 44, 51, 78), c'est souvent signe d'une mauvaise conception.
Ensuite, de ce que j'ai compris de "strsep", la valeur retournée devient NULL quand il n'a plus rien à transmettre.
J'en déduis donc que comme ta chaine de départ est vide, il ne prut retourner qu'une seule valeur, et au 2ième tour de ton for, tu fais un strcpy entre un char* (initialisé en global, je suppose, c'est une mauvaise pratique, on évite les variables globales) et un NULL.
Donc strcpy devrait se vautrer correctement.
À côté de cela, je vois "i <= lg" dans ton while, cela veut donc dire que le paramètre "lg" correspond à nombre d'item - 1 de ton tableau "tab".
Je ne fais pas de C/C++, mais il me semble qu'en regardant ce point ça devrait t'aiguiller.
Sinon, un coup de pas à pas peut aussi être pratique.
Ensuite, de ce que j'ai compris de "strsep", la valeur retournée devient NULL quand il n'a plus rien à transmettre.
J'en déduis donc que comme ta chaine de départ est vide, il ne prut retourner qu'une seule valeur, et au 2ième tour de ton for, tu fais un strcpy entre un char* (initialisé en global, je suppose, c'est une mauvaise pratique, on évite les variables globales) et un NULL.
Donc strcpy devrait se vautrer correctement.
À côté de cela, je vois "i <= lg" dans ton while, cela veut donc dire que le paramètre "lg" correspond à nombre d'item - 1 de ton tableau "tab".
Je ne fais pas de C/C++, mais il me semble qu'en regardant ce point ça devrait t'aiguiller.
Sinon, un coup de pas à pas peut aussi être pratique.