为什么下面的程序给出了输出: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