Je me demande simplement ce qui se passe lorsque j’utilise le mauvais spécificateur de format en C?
Par exemple:
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);
que se passe-t-il lorsque j’utilise un spécificateur de format incorrect en C?
De manière générale, comportement indéfini. *
Cependant, rappelez-vous que printf
est une fonction variadique et que les arguments des fonctions variadiques sont soumis aux promotions d’arguments par défaut . Ainsi, par exemple, un caractère est promu en tant que int
. Donc, dans la pratique, ils donneront les mêmes résultats:
char x = 'A'; printf("%c\n", x); int y = 'A'; printf("%c\n", y);
alors que ceci est un comportement indéfini:
long z = 'A'; printf("%c\n", z);
* Voir par exemple la section 7.19.6.1 p9 de la norme C99:
Si l’un des arguments n’est pas du type correct pour la spécification de conversion correspondante, le comportement est indéfini.
Puisque x est A, la première impression f affichera: ‘A’.
La seconde affichera la valeur ascii de A (recherchez-la).
Le 3ème imprimera le caractère ascii pour 65 ans (je pense que c’est un A ou un, mais c’est une lettre).
Le quasortingème en imprimera 65.
Le 5ème imprimera 128.