Est-ce que sscanf (“123456789123456789123456789”, “% d”, & n) ont 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,

  • la conversion devrait-elle être considérée comme ayant échoué?
  • le comportement est-il défini du tout?

    D’après la norme 7.21.6.2p10 ( (f)scanf , s’applique à toute la famille):

    … Si cet object n’a pas de type approprié ou si le résultat de la conversion ne peut pas être représenté dans l’object, 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 renvoient LONG_MAX etc. pour une entrée trop grande et définissent errno == ERANGE . Donc, si vous avez besoin d’informations exactes, numérotez manuellement l’entrée et utilisez ces fonctions pour la conversion. Un autre avantage: une meilleure gestion des erreurs.