如何理解
main(a)
{
printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);34;}",34);
}
首先
c语言中printf()的一般格式为
printf(格式控制字符串);
printf(格式控制字符串,输出值参数表);
其次
printf参数进栈顺序是从右向左,也就相当于按下面的顺序执行4个语句:
1.34;
2.a="main(a){printf(a,34,a=%c%s%c,34);34;}"
3.34;
4.a;(a已在第二步被赋值为"main(a){printf(a,34,a=%c%s%c,34);34;}")
此时,结构就很清晰了。
第一个a就是格式控制字符串,其中%c%s%c分别对应后面三个参数:34(ASCII码为34的字符为"),"main(a){printf(a,34,a="%c%s%c,34);34;}"这么一个字符串,34。