Bonjour,

Je cherche à faire un programme qui à partir d'un alphabet {a, b}, genere tous les mots possibles de taille inferieure ou egale à un entier "n".
Par exemple pour n=2 :

a; b; aa; ab; ba; bb.

Pour cela, j'ai procédé de la maniere suivante:

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
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void generer(char* mot, int n)
{
    char* mot_a;
    char* mot_b;
 
    // J'ai essayé de mettre des malloc, mais ca ne ne donne rien :o).
    mot_a = (char*) malloc(n*sizeof(char));
    mot_b = (char*) malloc(n*sizeof(char));
 
    //on copie mot dans deux variables chaine de caractere. L'une pour
    //la concatener avec "a", l'autre avec "b".
    mot_a = mot;
    mot_b = mot;
 
    //condition d'arret du programme.
    if (n==0)
        exit(0);
 
//debugage amateur
printf("avant probleme\n");
 
    // On concatene la lettre "a" à mot_a, puis on l'affiche
    strcat(mot_a, "a");
 
//debugage amateur
printf("apres probleme\n");
 
    puts(mot_a);
 
    // on fait de meme avec mot_b et "b"
    strcat(mot_b, "b");
    puts(mot_b);
 
    //Appels recursifs pour generer les autres mots
    //On decremente n pour que le programme s'arrete quand n = 0
    generer(mot_a, n-1);
    generer(mot_b, n-1);
}
 
int main()
{
    int n;
 
    printf("programme de generation de mots a partir de l'alphabet {a, b}\n");
    printf("Entrez N\n");
    scanf("%d", &n);
 
    // on donne un mot "vide" au depart.
    generer("", n);
 
    return 0;
}
Comme vous pourrez le constater dans le code (ou en executant le programme), ca plante juste apres le 1er strcat. En lancant le debuggeur (que je ne maitrise pas du tout) j'ai cru comprendre qu'il s'agissait d'une "segmentation fault".

Voila voila. Alors si vous pouviez m'aider... Merci d'avance.