Un scanf() qui perturbe mon code - C - Programmation
Marsh Posté le 19-03-2009 à 16:52:45
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é).
Marsh Posté le 19-03-2009 à 17:11:32
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
Marsh Posté le 19-03-2009 à 18:06:30
%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 :
|
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/
Marsh Posté le 19-03-2009 à 19:28:04
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
Marsh Posté le 19-03-2009 à 16:33:02
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