以下のプログラムが出力を与える理由:A.
\n
フォーマット指定子の後の使用は何%d
ですか? Linux、Windows、およびideoneで試しました。
#include <stdio.h>
int main(void)
{
char p[]="%d\n";
p[1]='c';
printf(p,65);
return 0;
}
最初に、プログラムはフォーマット文字列を変更します: "%c\n" になります。次に、大文字の ASCII コードとして再解釈される 65 を出力しA
ます。
これは
printf("%c\n", 65);
あるいは
printf("%c\n", 'A');
などの可変引数関数に値が渡されると、char
値が に変換されるためです。int
printf
実行の流れと変数の状態を追ってみましょう。最初に、文字列 p = "%d\n" を設定しています。'%d' は、'%d' の場所に整数を出力するように printf に指示し、文字列引数の後に printf に渡されます。次に、p[1] = 'c' を設定しています。p を "%c\n" に変更します。これは、配列のインデックスが 0 から始まるため、1 の位置を参照するときに 2 番目の文字を変更するためです。p と 65 を指定して printf を呼び出すと、呼び出しは次のようになります: 'printf("%c\n", 65)'. %c は、%c を 2 番目の引数として渡された文字に置き換えるように printf 関数に指示します。C では、文字は ASCII テーブルで整数として表されます (ここで見つけることができます: http://www.asciitable.com/)。たまたま 65 が 'A' のコードであるため、'A' の後に改行が出力されます。これがお役に立てば幸いです。
ASCII 文字エンコーディング。Aは65です。http://www.asciitable.com/
出力フォーマット指定子を %d - 整数から %c - 文字に変更しています
%c
を意味しchar
ます。
65は「A」のASCIIコードです。
フォーマット文字列"%c"
を使用して、文字を出力するように指定しますprintf
。65は文字「A」の ASCII 値です。
文字値の表など、ASCII の詳細については、ウィキペディアのページを参照してください。