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 d'entier cible,
De la norme, 7.21.6.2p10 ((f)scanf
, s'applique à toute 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 n'est pas défini.
On dirait une autre raison d'être très prudent avec la famille scanf
. Les fonctions strtoXX
ont un comportement entièrement défini. Ils sont de retour LONG_MAX
etc. pour une entrée trop grande et définissez errno == ERANGE
. Donc, si vous avez besoin d'informations exactes, effectuez une tokenisation manuelle de l'entrée et utilisez ces fonctions pour la conversion. Autre avantage: meilleure gestion des erreurs.