"Erreur de segmentation" à cause d'un scanf ?

Résolu/Fermé
tessa90 Messages postés 4 Date d'inscription vendredi 18 février 2011 Statut Membre Dernière intervention 22 février 2011 - 18 févr. 2011 à 12:49
tessa90 Messages postés 4 Date d'inscription vendredi 18 février 2011 Statut Membre Dernière intervention 22 février 2011 - 18 févr. 2011 à 20:27
Bonjour,

J'ai un souci avec le code suivant qui compile parfaitement mais affiche une erreur de segmentation au moment d'afficher la "reponse-donnee".

int main(){
char* mot=NULL;
char* reponse_donnee=NULL;
mot=un_mot();
printf("Le mot mélangé est : \n");
melanger(mot);
printf("Quelle est votre réponse ? \n");
scanf("%29s",reponse_donnee);
printf("%s",reponse_donnee);
printf("%s",mot);
if(strcmp(reponse_donnee,mot)!=0)
printf("Vous avez perdu ! \n");
else
printf("Bravo, vous avez gagné ! \n");
return 0;
}

En gros le but du programme est de choisir un mot au hasard dans un dictionnaire de mot (mot)=un_mot()
puis on mélange les lettres du mots, on présente le nouveau mot (melanger(mot)) et l'utilisateur doit deviner le mot initial. L'erreur de segmentation a lieu lors de la lecture de la reponse de l'utilisateur.
Pourriez-vous m'aider svp ?
Merci


2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
18 févr. 2011 à 13:13
Bonjour,

scanf("%29s",reponse_donnee);
reponse_donnee est un pointeur qui pointe sur NULL;
Grosso modo, tu demandes à ton programme d'écrire à l'adresse 0, d'où le segfault. Tu dois initialiser ton pointeur avec un malloc(30); (il ne faudra pas oublier de libérer la zone allouée avec free(reponse_donnee).
Ou tout simplement, char reponse_donnee[30]; à la place de ton char *reponse_donnee.

Cdlt,
2