2012-09-19 89 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'后跟一个换行符。我希望这是有帮助的!

相关问题