Probleme avec mon code aidez moi svp
Fermé
sou2904
Messages postés
1
Date d'inscription
lundi 7 décembre 2020
Statut
Membre
Dernière intervention
7 décembre 2020
-
Modifié le 7 déc. 2020 à 23:18
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 11 déc. 2020 à 11:32
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 11 déc. 2020 à 11:32
A voir également:
- Probleme avec mon code aidez moi svp
- Code asci - Guide
- Code puk bloqué - Guide
- Code telephone oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
Modifié le 11 déc. 2020 à 11:40
Modifié le 11 déc. 2020 à 11:40
Bonjour,
Plusieurs remarques :
Effectivement strchr retourne un
En effet, le 3e paramètre de n ne signifie que n caractères doivent être recopiés, mais le nombre maximal de caractères qui peuvent encore être recopiés dans le buffer destination (voir
Exemple :
Mais le plus simple, c'est juste de remplacer tes
Ensuite pour poser ta question, voilà ce que je te propose :
Bonne chance
Plusieurs remarques :
- J'imagine que tu débutes en C, mais sache que les variables globales sont une mauvaise habitude. Cela complexifie le débogage (notamment pour suivre qui peut modifier telle ou telle variable). Normalement il vaut mieux passer tes variables en paramètres des fonctions appelées. Typiquement tes chaînes de caractères devraient être passées de fonction en fonction par pointeur (
char *
). Mais pour le moment tu peux ignorer cette remarque. - Comme tes fonctions ne sont pas toutes déclarées avant d'être utilisées (si on lit le fichier de haut en bas), déclare tes fonctions en début de fichiers, cela évitera les warnings :
int main(); void LeMotus(); void printScore(); void printClassement(); void LePendu();
- Inclue le header
<ctype.h>
pour éviter le warning liées àtoupper
:
#include <ctype.h>
- Quelques incohérences restantes dans ton code :
warning: initialization of ‘int’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
325 | int verifyChar = strchr(malplace,motGame[randomMot][i]) - motGame[randomMot][i];
Effectivement strchr retourne un
char *et non un
intdonc cette soustraction n'a pas de sens (du moins, pas celle que tu crois).
- Ensuite ici il y a deux erreurs mémoires (potentielles segmentation fault)
toto.c:175:9: warning: ‘strncat’ specified bound 1 equals destination size [-Wstringop-overflow=]
175 | strncat(motsecret, "*", 1);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
toto.c: In function ‘LeMotus’:
toto.c:269:9: warning: ‘strncat’ specified bound 1 equals destination size [-Wstringop-overflow=]
269 | strncat(motsecret,"*",1);
|
En effet, le 3e paramètre de n ne signifie que n caractères doivent être recopiés, mais le nombre maximal de caractères qui peuvent encore être recopiés dans le buffer destination (voir
man strncat).
Exemple :
#include <string.h> #include <stdio.h> int main(){ char motsecret[100]; unsigned i; for (i = 0; i < 5; i++) { strncat(motsecret, "*", 100 - i); } printf("%s", motsecret); return 0; }
Mais le plus simple, c'est juste de remplacer tes
strncat(motsecret, "*", 1)par
strcat(motsecret, "*"). En effet, comme
"*"est une chaine statique, tu as la certitude qu'elle s'achève par un
'\0', et donc utiliser
strncatn'apporte pas de garantie supplémentaire dans ton cas particulier.
Ensuite pour poser ta question, voilà ce que je te propose :
- Fais un code minimal, qui met en évidence le problème, et dis-nous quel est ce problème et ce qui te bloque. Typiquement si ton code a pour but de faire un motus, il ne devrait pas y avoir de pendu...
- Précise ta question car là on ne sait pas ce qui te bloque / ce que tu veux faire.
Bonne chance