c scanf undefined-behavior

¿Sscanf("123456789123456789123456789", "% d", & n) tiene un comportamiento definido?



undefined-behavior (1)

De la norma, 7.21.6.2p10 ( (f)scanf , se aplica a toda la familia):

... Si este objeto no tiene un tipo apropiado, o si el resultado de la conversión no se puede representar en el objeto, el comportamiento no está definido .

Parece otra razón para ser muy cauteloso con la familia scanf . Las funciones strtoXX tienen un comportamiento completamente definido. LONG_MAX etc. para una entrada demasiado grande y configuran errno == ERANGE . Entonces, si necesita información exacta, identifique la entrada manualmente y use estas funciones para la conversión. Otro beneficio: mejor manejo de errores.

Cuando sscanf() u otra función de la familia scanf recibe una secuencia de dígitos cuyo valor convertido excede el valor máximo del tipo entero objetivo,

  • ¿Debería considerarse que la conversión ha fallado?
  • es el comportamiento definido en absoluto?