爲什麼下面的程序給出了輸出: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;
}
爲什麼下面的程序給出了輸出: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;
}
首先,程序修改格式字符串:它變成了「%c \ n」。然後打印65,它被重新解釋爲一個ASCII碼,這是一個大寫的A
。
這是相同的
printf("%c\n", 65);
甚至
printf("%c\n", 'A');
因爲傳遞到可變參數的功能,例如當printf
char
值被轉換爲int
。
ASCII字符編碼。 A是65. http://www.asciitable.com/
您正在改變從%d的輸出格式說明 - 整數%C - 字符
%c
裝置char
。
65是'A'的ASCII碼。
使用格式字符串"%c"
您指定printf
應打印一個字符。 是字符'A'的ASCII值。
您將在wikipedia page上找到關於ASCII的更多信息,包括字符值表。
讓我們來關注執行流程和變量的狀態。最初,您正在設置字符串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'後跟一個換行符。我希望這是有幫助的!
提示:字符代碼。 – chris
你可以在使用EBCDIC的平臺上試用它。 –
@DanielFischer,*具有相同思想的高五* – chris