Bonjour,
Alors voila, après avoir chercher de longues heures sur le net, c'est en désespoir de cause que je viens ici, car je ne sais plus trop quoi tenter.
Donc, je dois réaliser un programme qui va lire, ligne par ligne, tous les fichiers d'un repertoire (nommé test dans mon code). Je récupère donc les noms de fichier, et je les concatene avec le chemin du répertoire. Ensuite, ma méthode readVote(filename) va s'occuper de la lecture.
Actuellement le programme fonctionne, mais je rencontre des problèmes que je n'arrive pas à résoudre: Si je supprime la ligne "char * newname = "";", qui ne sert à rien du tout(c'était un ancien test), le compitaleur(gcc sous cygwin) me renvoie une segmentation fault. Idem, si je supprime "printf("%d \n",strlen(long_s));", à nouveau, erreur de segmentation.
J'ai pensé que cela devait venir d'overflow au niveau de mes tableaux de caractères, et j'ai tenté de regler ca avec un malloc, ou en attribuant une taille fixe à mon tableau long_s, mais j'obtenais le même genre de problème qu'expliqué ci-dessus.
Ensuite, j'ai remarqué un autre problème: Si je créais une variable char test[10] au tout debut de ma main, et que je regardais la taille, j'obtenais 11(normal). Mais si je la créais juste après "char * newname = "";", j'obtenais 5, et si je la créais entre "int size;" et "char * newname = "", j'obtenais une segmentation fault! Bref, je commence à ne plus rien y comprendre...
Donc voila, si quelqu'un a déjà eu ce genre de problème, ou sait d'où vient le mien, ca m'aiderait fortement, parque la je ne vois plus trop quoi faire:/.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 int main(int argc, char* argv[]){ int i; int x; int size; char const * dirPath = "./test/"; DIR * rep = opendir("./test"); if (rep != NULL) { struct dirent * ent; while ((ent = readdir(rep)) != NULL) { char * name = (*ent).d_name; if(strcmp(".",name) && strcmp("..",name)){ size = strlen(name) + strlen(dirPath) +1; char * long_s = malloc(size*sizeof(char)); printf("%d \n",strlen(long_s)); //PROBLEME SI ON SUPPRIME CETTE LIGNE i=0; x=0; while (dirPath[i]){ long_s[i] = dirPath[i]; ++i; } while (name[x]){ long_s[i] = name[x]; ++i; ++x; } long_s[i] = '\0'; readVote(long_s); free(long_s); } } closedir(rep); } return 0; }
Partager