1

为什么下面的程序给出输出:A。

\n格式说明符后有什么用%d?我已经在 Linux、Windows 和ideone上尝试过。

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

5 回答 5

3

首先,您的程序修改格式字符串:它变为“%c\n”。然后它打印 65,它被重新解释为一个 ASCII 码,它是一个大写的A.

这与

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

甚至

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

因为charint在传递给可变参数函数(例如printf.

于 2012-09-19T02:23:57.243 回答
2

ASCII 字符编码。A 是 65。http ://www.asciitable.com/

您正在将输出格式说明符从 %d - integer 更改为 %c - character

于 2012-09-19T02:22:49.080 回答
2

%c意味着char

65是'A'的ASCII码。

于 2012-09-19T02:23:10.987 回答
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' 后跟一个换行符。我希望这是有帮助的!

于 2012-09-19T02:27:44.770 回答
1

"%c"使用您指定的格式字符串printf应该打印一个字符。65是字符“A”的 ASCII 值。

您可以在wikipedia page上找到有关 ASCII 的更多信息,包括字符值表。

于 2012-09-19T02:23:12.783 回答