为什么下面的程序给出输出: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');
因为char
值int
在传递给可变参数函数(例如printf
.
ASCII 字符编码。A 是 65。http ://www.asciitable.com/
您正在将输出格式说明符从 %d - integer 更改为 %c - character
%c
意味着char
。
65是'A'的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' 后跟一个换行符。我希望这是有帮助的!
"%c"
使用您指定的格式字符串printf
应该打印一个字符。65是字符“A”的 ASCII 值。
您可以在wikipedia page上找到有关 ASCII 的更多信息,包括字符值表。