Bonjour ! Ce que tu peux faire, c'est mettre plein de "printf" partout afin de voir à quel endroit précis du programme le plantage a lieu. Ensuite, si tu ne vois toujours pas le problème, dis-nous où le plantage a eu lieu et ce sera plus facile. (Là, juste en lisant le code, je ne vois pas trop ce qu'on peut faire pour avancer.)
Bienvenue dans le monde merveilleux de l'encodage de caractères !
En effet, C possède des chaînes de caractères sur un octet qui est largement suffisant pour la table ASCII. En revanche, avec le temps, on a du intégrer le support des autres langues, autres lettres, autres alphabet, etc. Et tout ça finalement dépasse la taille d'un caractère et pour ça, plusieurs dieux ont inventés un concept simple : UTF-8.
En réalité, une chaîne de caractère contiendra des octets à la suite qui peuvent être plus nombreux que le vrai nombre de lettres du texte. Exemples :
abc -> 3 octets, 3 caractères
abé -> 4 octets, 3 caractères (é vaut 233 en UTF-8 et nécessitent donc 2 octets).
En bref, strlen n'est pas compatible UTF-8 et doit uniquement être utilisé avec des chaînes ASCII si ton but est d'obtenir le nombre réel de caractères.
Notes : cette explication est succinte, en réalité il y a d'autres encodages disponibles que UTF-8, mais en 2019 il y a aucune raison d'utiliser autre chose.
Mais à part ça il y a plusieurs choses qui ne vont pas dans ton code. N'oublie pas non plus que fgets stocke le '\n' final trouvé (\r\n sur windows) dans la ligne. Donc si tu es sur Linux, il est problable que ton mot contiennent DEUX\n (donc 5 caractères et non 4).
- Edité par markand 23 septembre 2019 à 14:41:54
git is great because Linus did it, mercurial is better because he didn't.
Tu n'a plus de "segmentation fault", c'est un coup de bol : dans ta fonction choisirMotMystere, ligne 91, tu déclares un pointeur motMystere que tu utilises plus loin dans ton code, sans l'initialiser !
Non tu ne l'a pas initialisé ! Dans la fonction main, ce n'est pas la même variable.
Les caractères superflu vienne du fait que tu n'as pas mis le caractère de fin de chaîne à ta chaîne motJoueur que tu affiches ligne 37 de la fonction main.
La prochaine fois, utilise le debugger aussi. Quand on développe et que ça plante on ne s'amuse pas à deviner d'où ça vient
git is great because Linus did it, mercurial is better because he didn't.
Problème : Segmentation fault (core dumped)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.