0

私はC言語の初心者ですが、次のコードが「A」として出力される理由を理解できました。

私を悩ませているのは、printfステートメントの配列名pです。このpはコンパイラによってどのように扱われていますか?

5行目以降のpを文字配列"%c \ n"に置き換えるにはどうすればよいですか?

これはばかげた質問だと知っているので、このうさぎを投稿して申し訳ありません。

誰かが私がこの背後にある概念を理解するのを手伝ってくれるでしょうか?

 line1:      #include<stdio.h>
 line2:      int main()
 line3:      {
 line4:          char p[]="%d\n";
 line5:          p[1]='c';
 line6:          printf(p,65);
 line7:          return 0;
             }
4

5 に答える 5

6

の最初の引数printf()const char*、フォーマット指定子を含むです。文字列リテラルとして表示するのがより一般的です。

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

ただし、文字列を含む変数を使用することは合法です。

の割り当てにより、バッファ内のがにp[1] = 'c'変更dされ、その結果、文字(の10進値)が標準出力に書き込まれます(数値を出力するのではなく、文字を印刷するように指示されます)。cpA65A%cprintf()%d

于 2012-07-25T10:32:00.550 に答える
2

配列全体を置き換えるのではなく、配列のオフセット#1の文字(2番目の文字)だけを置き換えます。これを「c」に置き換えて、コンテンツを「%c \ n」にします。これをフォーマット文字列として使用すると、整数65が大文字のラテンAとしてフォーマットされます。

于 2012-07-25T10:29:46.590 に答える
1

6行目: 「A」のASCII値は65
printf(p,65);
に変更されます。http://www.asciitable.com/
printf("%c\n",65);

于 2012-07-25T10:33:30.597 に答える
0

以下の説明:

char p[]="%d\n";

上記の実行後、Pには-> "%d\n"が含まれます

 line5:          p[1]='c';

ここでは、ゼロベースのインデックスの1番目の文字を変更しているため、Pは "%c\n"になります。

line6:          printf(p,65);

これは次と同等です。

printf("%c\n",65)

また

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

したがって、Aの出力が得られます

于 2012-07-25T10:32:34.127 に答える
0
     #include<stdio.h>
       int main()
       {
          char p[]="%d\n";   #This is stored at p[1]
          p[1]='c'           # d is replaced by c
          printf(p,65);      # p is taken as p[1] and is replaced by "%c\n"
           return 0;
         }

出力:A#ASCII値65

66として値を指定すると、出力は「B」などになります。

于 2012-07-25T10:41:25.303 に答える