Ce bout de code doit décomposer une ligne de texte en mots.
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
    int j=0,x=0;
   char * mot; /*pointeur sur le tableau contenant un mot */
 
    mot = malloc (2*sizeof(char)); /* creation du tableau dynamique pour le mot */
    if( mot == NULL )
    {
       fprintf(stderr,"Allocation impossible");
       exit(EXIT_FAILURE);
    }
 
    /* parcours de la ligne */
    for (j=0 ; j<=Tailleligne ; j++) {
        if(isspace(ligne[j]) || ispunct(ligne[j])) {  /*si espace OU ponctuation */
            if(nbAjout==0) {
                MaChaine = inserer_debut(mot, Numligne);  /*Si premier ajout on sauvegarde le mot en tete */
                nbAjout=100;
            }
            else{    MaChaine=inserer_fin(MaChaine, mot, Numligne); } /* Sinon on sauvegarde le mot en queue */
 
            free(mot); /* on detruit le mot */
            mot = malloc (2*sizeof(char)); /* creation de mot */
            if( mot == NULL )
            {
               fprintf(stderr,"Allocation impossible");
               exit(EXIT_FAILURE);
            }
 
            x=0; /* et c'est reparti pour un nouveau mot !! */
        }
        else    {
            mot[x]=ligne[j];    /* recuperation du caractère */
            mot = realloc (mot, x+1 *(2*sizeof(char)));  /* Ajout d'un element au tableau */
            printf(" mot[%d] = %c \n", x , mot[x] );    
            x++; /* et on reboucle */
 
        }
    }
alors jai fait le teste sur la chaîne : "Je teste ma restitution et mon code de merde car je suis un mauvais."

Jai comparé le mot qui a été lu et le mot qui a été stocké et Ô surprise :
mot[0] = J
mot[1] = e MotLu: Je ; Mot stocké: Je

ca marche jusqu'à "restitution"
mot[0] = r
mot[1] = e
mot[2] = s
mot[3] = t
mot[4] = i
mot[5] = t
mot[6] = u
mot[7] = t
mot[8] = i
mot[9] = o
mot[10] = n MotLu: restitution ; Mot stocké: restitution

"et", "mon", cette partie est OK
Mais à partir de là ça se gate un peu...

mot[0] = c
mot[1] = o
mot[2] = d
mot[3] = e MotLu: codeitution ; Mot stocké: codeitution

niii?? o__O

Apres je retrouve le même genre de chose pour les mots dépassant les 3 caractères... : merdetution, suisetution, mauvaistion
(...)
Il ne devrait rien rester de "restitution" puisqu'à chaque fois je libère mon espace mémoire free(mot). Je suis un peu perdu là...
Merci pour votre aide.