1

以下のプログラムが出力を与える理由:A.

\nフォーマット指定子の後の使用は何%dですか? Linux、Windows、およびideoneで試しました。

#include <stdio.h>
int main(void)
{
    char p[]="%d\n";
    p[1]='c';
    printf(p,65);
    return 0;
}
4

5 に答える 5

3

最初に、プログラムはフォーマット文字列を変更します: "%c\n" になります。次に、大文字の ASCII コードとして再解釈される 65 を出力しAます。

これは

printf("%c\n", 65);

あるいは

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

などの可変引数関数に値が渡されると、char値が に変換されるためです。intprintf

于 2012-09-19T02:23:57.243 に答える
2

実行の流れと変数の状態を追ってみましょう。最初に、文字列 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' の後に改行が出力されます。これがお役に立てば幸いです。

于 2012-09-19T02:27:44.770 に答える
2

ASCII 文字エンコーディング。Aは65です。http://www.asciitable.com/

出力フォーマット指定子を %d - 整数から %c - 文字に変更しています

于 2012-09-19T02:22:49.080 に答える
2

%cを意味しcharます。

65は「A」のASCIIコードです。

于 2012-09-19T02:23:10.987 に答える
1

フォーマット文字列"%c"を使用して、文字を出力するように指定しますprintf65は文字「A」の ASCII 値です。

文字値の表など、ASCII の詳細については、ウィキペディアのページを参照してください。

于 2012-09-19T02:23:12.783 に答える