probleme dans un exercice d'allocation dynamique
Bonjour,
en fait ca fait un jour que ej suis bloqué une erreur affiché par le compilateur et que j'arrive pas à la résoudre.
Le but de l'exercice est le suivant :
- La fonction char **decompose_chaine(char *chaine) parcourt la chaine fournie en argument, alloue le tableau, alloue les chaines correspondant aux mots et retourne un pointeur sur le tableau alloué. Si aucun mot n’est trouvé dans la chaine, la fonction retourne la valeur NULL.
l'erreur affiché est : La variable nb_char est utilisé sans etre initialisée.
Je vous remercie d'avance pour toutes suggestions de votre part, et voici ce que j'ai codé.
Code:
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 64 65 66 67 68 69 70 71 72 73
|
#include <stdio.h>
#include <stdlib.h>
// affichage du tableau
void afficher_tab_mots(char **tab){
int i = 0, j = 0;
if(tab == NULL){
printf(" le pointeur est NULL !!! \n");
exit(1);
}
while(tab[i] != NULL){
printf(" %s\n",tab[i]);
i++;
}
}
//decomposition de la chaine
char **decompose_chaine(char *chaine){
char ** tab;
int * nb_char, nb_mots = 0; //nb_char[i] est le nombre de caractere du i° eme mot
int espace = 0, p=0;
int i, j, k=0;
/*comptage des mots de la chaine de carateres*/
while(chaine[p] != '\0'){
if(chaine[p] == ' '){
nb_char[nb_mots] = espace; //espace est le nombre de caratere de chaque mot
nb_mots++;
espace = -1;
}
p++; //p est l'indice du caratere dans la chaine
espace++;
}
nb_char[nb_mots] = espace;
nb_mots++;
/*allocation du tableau de chaine de caracetres*/
tab = (char **) malloc(nb_mots * sizeof(char *));
for(i = 0; i < nb_mots; i++){
tab[i] = (char * ) malloc(nb_char[i]* sizeof(char));
}
/*remplissage du tableau alloué tab*/
for(i = 0; i < nb_mots; i++){
for(j = 0; i < nb_char[i]; j++){
tab[i][j] = chaine[k];
k++;
}
k++;
}
return tab;
}
int main(){
char * chaine = "Je suis yassine etudiant a jussieu";
char ** tab = decompose_chaine(chaine);
afficher_tab_mots(tab);
return 0;
} |