45 votes

Sscanf ("123456789123456789123456789", "% d", & n) a-t-il un comportement défini?

Lorsque sscanf() ou une autre fonction de la famille scanf reçoit une séquence de chiffres dont la valeur convertie dépasse la valeur maximale du type entier cible,

  • faut-il considérer que la conversion a échoué?
  • le comportement est-il défini?

48voto

Olaf Points 9969

De la norme, 7.21.6.2p10 ((f)scanf, s'applique à l'ensemble de la famille):

... Si cet objet n'a pas de type approprié, ou si le résultat de la conversion ne peut pas être représenté dans l'objet, le comportement est indéfini.

Ressemble à une autre raison d'être très prudent avec l' scanf de la famille. L' strtoXX fonctions de disposer d'un comportement défini. Ils retournent LONG_MAX etc. trop grande entrée et réglez errno == ERANGE. Donc, si vous avez besoin d'informations exactes, tokenise la saisie manuelle et l'utilisation de ces fonctions pour la conversion. Un autre avantage: une meilleure gestion des erreurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X