2017-03-08 5 views
0

私は中期的に勉強していて、ある概念を理解する上で問題があります。ここで質問です:C:printfステートメントでchar *を%sに渡す

次のコード行の出力は何ですか:

char S1[50] = "jack", S2[50] = "jill", S3[50], *Sptr; 

printf("%c$s\n", toupper(S1[0]), &S1[1]); 

出力は、それが「ジャック」を印刷している理由私は、理解していない

Jack 

です。 %sは文字列を出力することになっています。 & S1 [1]は文字列ですか?私はそれがS1 [1]のアドレスだと思った。そうじゃないの?

ありがとうございました。

+4

「%c%s \ n」を意味すると思います。このタイプミスは元のコードにありますか? – rlee827

+0

'%s'への引数は、文字列の最初の文字へのポインタです。 S1 [1]のアドレスはまさにそれです。 –

答えて

4

printf("%c%s\n", toupper(S1[0]), &S1[1]);

%cをそのを打破レッツ、対応するS1[0]はS1の大文字の最初の文字を印刷します。 (J)

%sおよび対応する&S1[1]は残りの文字列を表示します。 (ack)

&S1[1]は、文字列の2番目の文字のメモリアドレスを渡しています。

3

& S1 [1]は、 'jack'の 'a'を指すアドレスです。だから%sは 'ジャック'の終わりまで 'a'からの文字列を表示することを意味します。通常は '\ 0'は文字列の最後です。 '%s'は 'jack'の 'ack'を表示します。 '%c'は1文字を出力します。つまり、toupper()は1文字だけを変更します。

+1

''\ 0''は常に文字列の最後です。これは "文字列"の定義です –

関連する問題