¿Qué sucede cuando uso el especificador de formato incorrecto?

Resuelto JmJ asked hace 11 años • 2 respuestas

¿Me pregunto qué sucede cuando uso el especificador de formato incorrecto en C?

Por ejemplo:

x = 'A';
printf("%c\n", x);
printf("%d\n", x);

x = 65;
printf("%c\n", x);
printf("%d\n", x);

x = 128;
printf("%d\n", x);
JmJ avatar Jun 01 '13 02:06 JmJ
Aceptado

¿Qué sucede cuando uso el especificador de formato incorrecto en C?

En términos generales, comportamiento indefinido. *

Sin embargo, recuerde que printfes una función variada y que los argumentos de las funciones variadas se someten a las promociones de argumentos predeterminadas . Entonces, por ejemplo, a charse promueve a int. Entonces, en la práctica, ambos darán los mismos resultados:

char x = 'A';
printf("%c\n", x);

int y = 'A';
printf("%c\n", y);

mientras que este es un comportamiento indefinido:

long z = 'A';
printf("%c\n", z);


* Ver por ejemplo la sección 7.19.6.1 p9 del estándar C99:

Si algún argumento no es del tipo correcto para la especificación de conversión correspondiente, el comportamiento no está definido.

Oliver Charlesworth avatar May 31 '2013 19:05 Oliver Charlesworth