Probleme tableau de string
Résolu
morbak619
-
morbak619 -
morbak619 -
Bonjour et Bonne Année ^^ (oui jusqu'en avril on a droit)
tout d'abord je précise que je suis carrément un débutant donc désolé si c'est trivial^^
j'aurais besoin d'aide sur un programme de recherche de motif dan un texte.
Tout fonctionne parfaitement sauf quand j'essaie de stocker plusieurs motifs à l'aide d'un tableau de string
voila un appercu
char **motif;
motif =(char**)malloc(100*sizeof(char*)); //allocation pour stocker 100 motifs
(boucle i)
motif[i] =(char*)malloc(100*sizeof(char)); //allocation pour stocker des motis de 100 caractères
le problème est le suivant
si je fais un scanf("%s",&motif[0]) et que j'entre par exemple 123456789
un printf affiche
*motif[0]=123456789
*motif[1]=56789
*motfi[2]=9
on dirait que l'allocation de 100 caractère n'a pas fonctionné
si quelqu'un a une idée je suis preneur
merci d'avance
tout d'abord je précise que je suis carrément un débutant donc désolé si c'est trivial^^
j'aurais besoin d'aide sur un programme de recherche de motif dan un texte.
Tout fonctionne parfaitement sauf quand j'essaie de stocker plusieurs motifs à l'aide d'un tableau de string
voila un appercu
char **motif;
motif =(char**)malloc(100*sizeof(char*)); //allocation pour stocker 100 motifs
(boucle i)
motif[i] =(char*)malloc(100*sizeof(char)); //allocation pour stocker des motis de 100 caractères
le problème est le suivant
si je fais un scanf("%s",&motif[0]) et que j'entre par exemple 123456789
un printf affiche
*motif[0]=123456789
*motif[1]=56789
*motfi[2]=9
on dirait que l'allocation de 100 caractère n'a pas fonctionné
si quelqu'un a une idée je suis preneur
merci d'avance
A voir également:
- Probleme tableau de string
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
2 réponses
Bonjour
scanf prend comme paramètre l'adresse de la variable dans laquelle tu veux écrire.
Les adresses de tes tableaux de caractères sont motif[0], motif[1], etc... Tu les as initialisées avec les malloc
Donc le paramètre du scanf aurait dû être motif[0], motif[1], etc... et pas &motif[0], &motif[1]..
&motif[0] c'est l'adresse du pointeur qui te dit où se trouve ton 1er tableau de 100 caractères
&motif[1] c'est l'adresse du pointeur qui te dit où se trouve ton 2nd tableau de 100 caractères
Quand tu fais scanf("%s",&motif[0]), tu viens écrire ta chaîne sur les pointeurs au lieu de l'écrire dans les tableaux de caractères que tu avais réservés. Donc tu écrases les pointeurs : si tu essayes de faire un free, ça va planter dur...
J'aimerais bien savoir quels printf tu fais exactement pour obtenir les résultats que tu affiches, mais ils montrent bien que ce que tu affiches, c'est la zone des pointeurs (deux variables consécutives sont séparées de 4 octets) et pas celle allouée pour les caractères
scanf prend comme paramètre l'adresse de la variable dans laquelle tu veux écrire.
Les adresses de tes tableaux de caractères sont motif[0], motif[1], etc... Tu les as initialisées avec les malloc
Donc le paramètre du scanf aurait dû être motif[0], motif[1], etc... et pas &motif[0], &motif[1]..
&motif[0] c'est l'adresse du pointeur qui te dit où se trouve ton 1er tableau de 100 caractères
&motif[1] c'est l'adresse du pointeur qui te dit où se trouve ton 2nd tableau de 100 caractères
Quand tu fais scanf("%s",&motif[0]), tu viens écrire ta chaîne sur les pointeurs au lieu de l'écrire dans les tableaux de caractères que tu avais réservés. Donc tu écrases les pointeurs : si tu essayes de faire un free, ça va planter dur...
J'aimerais bien savoir quels printf tu fais exactement pour obtenir les résultats que tu affiches, mais ils montrent bien que ce que tu affiches, c'est la zone des pointeurs (deux variables consécutives sont séparées de 4 octets) et pas celle allouée pour les caractères