2

文字列を出力することになっている簡単なプログラムがあります。しかし、期待される出力が得られません。プログラムの何が問題なのか誰にも教えてもらえますか?

これが私のコードです:

main()
{
   char arr[] = "Test_string";
   printf("%20s"+1,arr);
   return 0;
}

output: 20s

予想される出力は次のとおりです。Test_string

"Test_string""%20s"フォーマット指定子として指定しているため、20 か所に出力されます。

4

2 に答える 2

6

printf呼び出しを注意深く見ると、非常に簡単です。

以下はprintfのプロトタイプですint printf(const char *format, ...);

printf最初の引数としてフォーマット文字列へのポインタが必要です。あなたのプログラムでは、この文字列へのポインタを渡しています :"20s"そして、printf渡したものをすぐに出力します。

"20s"渡されたポインタがではなくを指している理由を説明しましょう"%20s"

C の引用符で囲まれた文字列は、文字ポインターとして解釈されます。 関数に渡されるとポインターに分解される文字配列。

printf("%20s",arr);と同等です:

const char * ptr = "%20s";
printf(ptr,arr);

同様にprintf("%20s"+1,arr);、次と同等です。

const char * ptr = "%20s";
printf(ptr+1,arr);

あなたが渡しているので"%20s"+1、printfに渡される実際のポインタは文字列を指しています"20s"

于 2012-12-12T17:43:13.263 に答える
3

フォーマット文字列の横にある +1 を削除します

printf("%20s",arr);
于 2012-12-12T17:43:31.300 に答える