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

Résolu
tessa90 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
tessa90 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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
tessa90 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Merci beaucoup pour ta réponse! Je viens de remplacer le char *reponse_donnee par char reponse_donnee[30] et ça marche ! ^^
0