我发现代码比较奇怪,我说因为对main进行了递归调用,这对我来说是新的东西因此我要求提供有关它的信息,最重要的是我想详细解释用于打印hello的方法世界,如果不是太麻烦。该计划如下:
#include <stdio.h>
int main(void)
{
static int i = 0xc;
putchar(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--) - 1);
return i ? main() : 0;
}
THX
答案 0 :(得分:3)
以递归方式调用main
是完全合法的。
输出为"hola mundo!!"
密钥字符串是
"\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69"
与
相同"\0!!odnum aloh"
移动一个字符(即使用i
代替h
,p
代替o
等,即:< / p>
"\x1\"\"peovn!bmpi"
然后,
(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--)
与
相同"\x1\"\"peovn!bmpi"[i--]
所以每个putchar
输出一个字符串减去一个字符,从右到左。