C语言关于printf函数的问题

这是教材上的一道题。

为什么下面程序运行结果与源代码一模一样:
#include

main(){char*a="main(){char*a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}

“printf(a,34,a,34)”这一句我没有想明白,百科上说“printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)”,但这里没有“格式化字符串”,我也不懂参量表是什么东东。

我现在的想法是由于字符串本身就是地址,printf(a,34,a,34)中的a就是"main(){char*a=%c%s%c;printf(a,34,a,34);}"的地址,但我改成printf(a)后,打印会有乱码。另外printf中的34起到了什么作用?

小弟刚刚学习C语言,还请各位指教,先谢谢了!

你说的是sprintf()吧

你数一下这个字符串的长度。刚好是34个单元