|
|
发表于 2005-8-26 21:22:56
|
显示全部楼层
Post by batiestuta
#include <stdio.h>
void main(a)
{
printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);
}
哪位解释一下
嗯,有点意思.
其实很简单啦,因为缺乏类型检查,所以本来是整型的a就可以用来做char*
这个函数所做的事情就是,将 34(其实就是双引号)压栈,将"main(a){printf(a,34,a=%c%s%c,34);}"字符串地址赋给a,然后将a压栈,最后将 34 , a 压栈,想想栈里面现在有什么? 一个format string的地址a,一个字符34作为printf的第二个参数,然后又是一个string的地址,然后又是一个字符34,所以printf就做下面的事情:输出 main(a){printf(a,34,a= 然后读第二个参数,发现是34(双引号),就打印出",然后再读第三个参数,是个string的地址,就打印出 main(a){printf(a,34,a=%c%s%c,34);},继续读第四个参数,也是34,又输出一个双引号",如此而已. |
|