2017-03-08 71 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]正在傳遞字符串第二個字符的內存地址。

3

& S1 [1]是一個地址,指向'jack'的'a'。所以%s表示從'jack'的'a'到結尾顯示一個字符串。通常'\ 0'是一個字符串的結尾。這意味着'%s'打印'jack'的'ack'。 '%c'打印一個字符,即J. toupper()只改變一個字符。

+1

''\ 0''總是一個字符串的結尾。這是「字符串」的定義 –