3

C で間違った書式指定子を使用するとどうなるのだろうか?

例えば:

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);
4

2 に答える 2

19

C で間違った書式指定子を使用するとどうなりますか?

一般的に言えば、未定義の動作です。*

printfただし、は可変個引数関数であり、可変個引数関数への引数はデフォルトの引数の昇格を受けることを思い出してください。たとえば、 acharは an に昇格しますint。したがって、実際には、これらは両方とも同じ結果になります。

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

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

一方、これは未定義の動作です。

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


* たとえば、C99 標準のセクション 7.19.6.1 p9 を参照してください。

対応する変換指定に対して正しい型でない引数がある場合、動作は未定義です。

于 2013-05-31T19:33:01.153 に答える