Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1514 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Un scanf() qui perturbe mon code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un scanf() qui perturbe mon code

n°1863674
cimourdain
Posté le 19-03-2009 à 16:33:02  profilanswer
 

Salut,
 
Il m'arrive un truc assez incompréhensible !
 
J'ai écris un programme qui marche bien. Dans ce programme j'utilise un WaitableTimer. En gros c'est un petit programme qui enchaine les fonctions: CreateWaitableTimer(), SetWaitableTimer(), et WaitForSingleObject().
 
Si dans ce programme, je rajoute au début une variable int short toto. Ca n'a aucune conséquence. Heureusement ! Si après cette déclaration je fais un scanf("%d", &toto), j'ai aucune erreur de compilation mais la condition:
if (WaitForSingleObject(hXXX, INFINITE) != WAIT_OBJECT_0)
est systématiquement fausse alors qu'elle ne l'était jamais avant l'ajout du scanf() ! La variable toto n'est utilisée nul part pourtant !
 
Si j'enlève le short (en gras plus haut), tout rentre dans l'ordre, il n'y a plus de problème.
 
Je suis scié ! Comment expliquer un tel comportement ???


Message édité par cimourdain le 19-03-2009 à 16:34:55
mood
Publicité
Posté le 19-03-2009 à 16:33:02  profilanswer
 

n°1863677
theshockwa​ve
I work at a firm named Koslow
Posté le 19-03-2009 à 16:38:13  profilanswer
 

parce que ton scanf va écrire 4 octets (int) dans une variable qui n'en contient que 2 (short) et il va donc écraser 2 octets à côté


---------------
last.fm
n°1863686
cimourdain
Posté le 19-03-2009 à 16:52:45  profilanswer
 

D'accord ! Effectivement j'aurais du y penser... Quel formateur pour un short du coup ?
N'y a-t-il pas un moyen de remplacer cette fonction scanf() par quelque chose d'un peu mieux ? (et plus sécurisé).

n°1863699
theshockwa​ve
I work at a firm named Koslow
Posté le 19-03-2009 à 17:11:32  profilanswer
 

il existe des extensions non standard de scanf pour supporter ca ... Regarde la doc de ton compilateur si tu te fiches de la compatibilité, sinon, ca ne doit pas te coûter grand chose de passer par un int, de toute façon.
 
Ca fait un moment que je ne fais plus de C, donc je laisse le soin à d'autres de proposer mieux que scanf :)


---------------
last.fm
n°1863750
jesus_chri​st
votre nouveau dieu
Posté le 19-03-2009 à 18:06:30  profilanswer
 

%hd je dirais
sinon le diagnostique est correct, c'est bien un problème de taille.
Pourquoi ne pas lire un entier puis le copier dans le short après ?
 

Code :
  1. int i;
  2. short toto;
  3. scanf( "%d", &i );
  4. toto = i;


 
edit:
scanf est complètement sécurisée si tu t'en sers bien. Peu de fonctions C sont non sécurisée, quoi que certains en dise. gets() par exemple.
Va voir là, c'est un exelent tuto pour s'en servir correctement :
http://xrenault.developpez.com/tutoriels/c/scanf/


Message édité par jesus_christ le 19-03-2009 à 18:08:40
n°1863772
Emmanuel D​elahaye
C is a sharp tool
Posté le 19-03-2009 à 19:28:04  profilanswer
 

cimourdain a écrit :

D'accord ! Effectivement j'aurais du y penser... Quel formateur pour un short du coup ?


"%hd"

Citation :

N'y a-t-il pas un moyen de remplacer cette fonction scanf() par quelque chose d'un peu mieux ? (et plus sécurisé).


fgets() + strtol().
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1863908
theshockwa​ve
I work at a firm named Koslow
Posté le 20-03-2009 à 10:28:44  profilanswer
 


 
Ah, tiens, effectivement, je me suis cantonné à relire le tableau du K&R et ils l'ont précisé dans le paragraphe suivant [:petrus75]


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Un scanf() qui perturbe mon code

 

Sujets relatifs
Comprendre code source : liens entre les fichiers[C#, Résolu] UserControl, classes en propriété et code du concepteur.
Help ... php+flickr : recuperer le secret code!probleme compliation code::block
connexion ado avec acces et besoin d'aide pour code vb svpComment découvrir un code ?
BESOIN DE CODE WORD VBcode VB
code pour bloquer le lancement d'une application windevdemande de code
Plus de sujets relatifs à : Un scanf() qui perturbe mon code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR