¿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?