Probleme tableau de string

Résolu/Fermé
morbak619 - 10 janv. 2009 à 22:12
 morbak619 - 10 janv. 2009 à 22:48
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

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
0
la honte !!!

merci beaucoup ^^
sa marche maintenant

en effet il m'a suffit d'enlever le &dans le scanf et de modifier mon printf qui visais effectivement mes pointeurs^^
on va dire que c'est parcequ'il est tard hein ^^

remerci et rebonne année
0