Bonjour, je n'ai pas l'habitude de poster sur les forums mais je suis face à un problème incompréhensible depuis 3 jours, voilà pourquoi je sollicite votre aide.
Le problème se situe dans la fonction find_ports qui doit renvoyer une structure comprenant un tableau lui même contenant des chaînes de caractères (la liste des ports ttyACM).
Lorsque je souhaite retourner seulement le "ttyACM0" dans le tableau, aucun soucis, mais lorsque je concatène à l'aide de strcat pour avoir "/dev/ttyACM0" j'obtiens une erreur de segmentation.
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
42
43
44 typedef struct { char ** COM; // tableau contenant la liste des ports COM unsigned int nb_com; // le nombre de ports COM }ls_ports; bool commence_par( char * comp,char * a_comp) { int i=strlen(comp)-1; int n; bool check=true; if (strlen(a_comp)-1<i) return NULL; else { for (n = i; n >=0 && check; n--) if (comp[n]!=a_comp[n]) check=false; return check; } } ls_ports find_ports() { struct dirent *lecture; ls_ports p; p.nb_com=0; p.COM=malloc(sizeof(char *)); p.COM[0]=NULL; DIR *rep; rep = opendir("/dev/" ); while ((lecture = readdir(rep))) { if (commence_par("ttyACM",lecture->d_name)) { p.nb_com++; if(realloc(p.COM,(p.nb_com)*sizeof(char *))==NULL) { printf("Recherche des ports COM : Erreur lors de la reallocation 1\n"); exit(1); } p.COM[p.nb_com-1]="/dev/"; strcat(p.COM[p.nb_com-1],lecture->d_name); } } closedir(rep); return p; }
J'ai déjà tenté de modifier ma structure comme ceci, sans aucun succès
J'ai aussi tenté d'allouer dynamiquement chaque p.COM[p.nb_ports-1] avec un realloc, sans succès non plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct { char * COM[14]; // tableau contenant la liste des ports COM unsigned int nb_com; // le nombre de ports COM }ls_ports;
Partager