Bonjour à tous, et bonne année à tous.
Je m'adresse à vous car j'ai un petit souci avec une fonction, voici d'abord une version de ma fonction qui marche très bien et qui fait ce j'attend d'elle, c'est-à-dire supprimer les doublons dans une chaîne de caractère passée en paramètre un peu comme l'outil "tr" sous linux, donc si par exemple je lu donne la chaîne "bonne annnee" elle me renvoie "bone ane":
Mais je dois appeler cette fonction de cette façon:
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 char* SupprimerDoublon(char *chaine, char lettre) { char *tab = malloc(sizeof(char) * strlen(chaine)); if(!tab) exit(-1); int i = 0, j = 0; while(chaine[i] != '\0') { if(chaine[i] == lettre) { tab[j] = chaine[i]; for(;chaine[i] == lettre; i++); j++; } else { tab[j] = chaine[i]; i++; j++; } } tab[j] = '\0'; return tab; }
et j'ai donc décidé de la modifier en (void) pour pouvoir l'appeler simplement comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 char *maChaine[] = {"bonjof gbbffgw fdgfwggf wdfggdfgggggdffggff wdxur al", "bbonne annee a tous", "superbbe biien mon ammi"}; int i, j; for(i = 0; i < 3; i++) maChaine[i] = SupprimerDoublon(maChaine[i], 'n'); for(j = 0; j < 3; j++) { printf("%s\n", maChaine[j]); free(maChaine[j]); }
Et c'est là que les problème commencent, voici mon code qui donne une segmentation fault à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for(i = 0; i < 3; i++) SupprimerDoublon(maChaine[i], 'n');.
Code : Sélectionner tout - Visualiser dans une fenêtre à part strcpy(chaine, tab);
Donc je me pose des questions, et je ne comprend pas pourquoi ça ne marche pas, sachant que dans le main je l'appelle de cette façon:
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 void SupprimerDoublon(char *chaine, char lettre) { char *tab = malloc(sizeof(char) * strlen(chaine)); if(!tab) exit(-1); int i = 0, j = 0; while(chaine[i] != '\0') { if(chaine[i] == lettre) { tab[j] = chaine[i]; for(;chaine[i] == lettre; i++); j++; } else { tab[j] = chaine[i]; i++; j++; } } tab[j] = '\0'; strcpy(chaine, tab); }
J'ai un petit doute sur le fait que j'alloue dynamiquement le tab mais pas la chaine qui arrive dans la fonction mais mes tests ne sont pas concluant. Pouvez-vous m'éclairer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 char *maChaine[] = {"bonjof gbbffgw fdgfwggf wdfggdfgggggdffggff wdxur al", "bbonne annee a tous", "superbbe biien mon ammi"}; int i, j; for(i = 0; i < 3; i++) SupprimerDoublon(maChaine[i], 'n'); for(j = 0; j < 3; j++) { printf("%s\n", maChaine[j]); }
Merci à vous.
Partager