Erreur de segmentation sur une fonction pour découper des informations

Fermé
ArionSH - Modifié le 29 avril 2020 à 19:12
NHenry Messages postés 15172 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 décembre 2024 - 30 avril 2020 à 00:50
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


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:

1 réponse

NHenry Messages postés 15172 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 décembre 2024 350
30 avril 2020 à 00:50
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.
0