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);	
}