我无法理解下面的程序代码如何输出该值。请帮助我理解。
#include<stdio.h>
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";
int main()
{
printf(s,34,s,34);
return 0;
}
输出:
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
答案 0 :(得分:2)
这实际上并不是一个宏。这只是对printf的简单调用。 printf的第一个参数是格式字符串。在这种情况下,它是全局变量s
中定义的值。格式字符%c%s%c
由参数34,s,34
提供。因此,由于%s
格式字符,字符串只是完整打印。并且两个34值打印为双引号字符(通过%c
)。
答案 1 :(得分:1)
您的printf
声明实际上等同于:
printf("char*s=%c%s%c;main(){printf(s,34,s,34);}", 34, s, 34);
^ ^ ^
我已使用^
标记了转化说明符。这些分别替换为:
"
- 对应于34 *s
"
- 对应于34 答案 2 :(得分:0)
您正在插入格式字符串作为参数,因此输出正确。 %s将替换为实际格式。 PS:宏在哪里?