Bonjour à tous,
J'essaie de coder en C une fonction qui affiche de manière récursive les "mots" de "aaa....a" à "zzz...zz" (voir un peu plus car j'arrête l'incrémentation des char quand ils arrivent à 127 et non 123) en incrémentant chaque caractère au fur et à mesure.
Dans le cas où le mot fait 3 caractères, il n'y a pas de soucis mais dès que je passe à 4, l'exécution me sort une erreur de segmentation. Le code me sort bien tous les premiers mots mais arrive à cette erreur de manière variable sur des mots qui commencent généralement pas le caractère 'g'.
Ci-dessous le code pour le cas où la taille du mot est 4. Est-ce que quelqu'un voit ce qui ne va pas et sur quelle partie de la mémoire je peux avoir cette erreur?
Question subsidiaire : vous avez surement remarqué dans la fonction main la ligne "bla[taille] = '\0';" Lorsque je ne la mets pas et que j'affiche le mot bla via printf, j'obtiens 4 'a' et un caractère bizarre. Ce caractère disparait lorsque je fixe manuellement la fin du string via "bla[taille] = '\0';" Je ne comprends pas pourquoi j'ai besoin de ça. Une idée?
Merci à tous pour votre aide et vos réponses et je reste à votre disposition si vous avez besoin d'explications.
Cordialement
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 #include <stdio.h> #include <string.h> #define DEBUT_RECH 97 int defileMot(char* motADefiler, int colonne) { int tailleMot = strlen(motADefiler); if(colonne >= tailleMot) { printf("erreur colonne\n"); return 1; } if(colonne == 0 && motADefiler[colonne] >=127) { printf("fin de la premiere colonne\n"); return 0; } if(colonne == tailleMot - 1) { if(motADefiler[colonne] >= 127) { motADefiler[colonne] = DEBUT_RECH; motADefiler[colonne-1]++; defileMot(motADefiler, colonne-1); } else { printf("%s\n", motADefiler); motADefiler[colonne]++; defileMot(motADefiler, colonne); } } else { if(motADefiler[colonne] >= 127) { motADefiler[colonne] = DEBUT_RECH; motADefiler[colonne-1]++; defileMot(motADefiler, colonne-1); } else { defileMot(motADefiler, colonne+1); } } return 2; } int main(void){ int taille = 4; char bla[taille]; for(int i = 0; i < taille; i++) { bla[i] = DEBUT_RECH; } bla[taille] = '\0'; //printf("%s\n", bla); defileMot(bla, 0); }
Partager