2006年12月27日水曜日

克隆自己的C语言程序

Text

  这是一个可以把自己的源代码输出的一个C程序,因为这有点类似于“克隆技术”,所以我就堂而皇之的取了“一个会克隆自己的C语言程序”这个题目。

Code

[1] filename -- cloneitself.c

#include <stdio.h>
int main()
{
char self[] = "#include %cint main()%c{%c%cchar self[] = %c%s%c;%c%cprintf(self,10,10,10,9,34,self,34,10,9,10,9,10);%c%creturn 0;%c}%c";
printf(self,10,10,10,9,34,self,34,10,9,10,9,10,10);
return 0;
}


Demo

shell> ./cloneitself
#include
int main()
{
char self[] = "#include %cint main()%c{%c%cchar self[] = %c%s%c;%c%cprintf(self,10,10,10,9,34,self,34,10,9,10,9,10);%c%creturn 0;%c}%c";
printf(self,10,10,10,9,34,self,34,10,9,10,9,10);
return 0;
}

Remark

  如果知道9,10,34对应的字符分别是制表符,换行,双引号,那么就不难理解这个程序拉。

Extension

   如果无心注意,我们可能不会想到一个程序可以完全产生一份自己的源代码。稍微拓展的想象一下,程序自己还可以做的事情有很多,比如自压缩/解压、“自 杀”(这个程序具体见“感情脆弱的C程序”一帖)、自我复制和传播(病毒特征)等等功能。是不是可以想象——也许有一天,程序有了自我学习和思考的能力 (人工智能)。

0 件のコメント: