2012-09-19 99 views
0

爲什麼下面的程序給出了輸出:A。爲什麼下面的程序給出了輸出:A

\n在格式說明符%d之後有什麼用? 我已經在Linux,Windows和ideone上試過了。

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

提示:字符代碼。 – chris

+0

你可以在使用EBCDIC的平臺上試用它。 –

+0

@DanielFischer,*具有相同思想的高五* – chris

回答

3

首先,程序修改格式字符串:它變成了「%c \ n」。然後打印65,它被重新解釋爲一個ASCII碼,這是一個大寫的A

這是相同的

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

甚至

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

因爲傳遞到可變參數的功能,例如當printfchar值被轉換爲int

2

%c裝置char

65是'A'的ASCII碼。

1

使用格式字符串"%c"您指定printf應打印一個字符。 是字符'A'的ASCII值。

您將在wikipedia page上找到關於ASCII的更多信息,包括字符值表。

2

讓我們來關注執行流程和變量的狀態。最初,您正在設置字符串p =「%d \ n」。 '%d'告訴printf在'%d'的地方打印一個整數,它會在字符串參數之後傳遞給printf。然後你設置p [1] ='c'。這將p更改爲「%c \ n」,因爲數組從0開始索引,所以當您引用1位置時更改第二個字符。他們用p和65調用printf,這會使調用看起來像這樣:'printf(「%c \ n」,65)'。 %c告訴printf函數將%c替換爲作爲第二個參數傳遞的字符。在C中,字符在ASCII表中表示爲整數(可在此處找到:http://www.asciitable.com/)。恰巧65是'A'的代碼,所以打印出一個'A'後跟一個換行符。我希望這是有幫助的!

相關問題