复制自己的什么啊?
fork()出来的不是你所要的? 就是复制源程序! 发信人: crazywill (开始努力学习啦), 信区: Programming 标 题: 输出为本身的c程序 发信站: 华南网木棉站 (Thu Dec 12 09:41:48 2002), 转信
发信人: StArGazEr (Wanderer-In-Heavens), 信区: Algorithm 标 题: 输出为本身的c程序 发信站: 南京大学小百合站 (Thu Dec 12 00:23:11 2002)
因为有人提起,以前也曾经注意到过,于是勾起了兴趣,网上收集了一把。 还真不少,这类程序的技巧在于字符串定义时对ASCII为34和10即引号和 回车符的妙用:
1。 char*f="main(){putchar('c');putchar('h');putchar('a');putchar('r'); putchar('*');& putchar('f');putchar('=');putchar(34);printf(f);putchar(34); putchar(';');& putchar(10);printf(f);putchar(10);}"; main(){putchar('c');putchar('h');putchar('a');putchar('r'); putchar('*');putchar('f');& putchar('=');putchar(34);printf(f);putchar(34);putchar(';'); putchar(10);& printf(f);putchar(10);}
2。 char*f="char*f=;main(){f[7]=0;printf(f);putchar(34);f[7]=';'; printf(f);& putchar(34);f[8]=0;printf(&f[7]);f[8]='m';putchar(10); printf(&f[8]);putchar(10);}"; main(){f[7]=0;printf(f);putchar(34);f[7]=';';printf(f);putchar(34);& f[8]=0;printf(&f[7]);f[8]='m';putchar(10);printf(&f[8]); putchar(10);}
3。 char*f="char*f=%c%s%c;%cmain()%c"; main()
4。 char a='"';char b='\n';char c='\'; char*f="char a='%c';char b='%cn';char c='%c%c';%cchar*f=%c%s%c;%cmain(){& printf(f,a,c,c,c,b,a,f,a,b,b);}%c"; main()
5。 char*lines[]={ "char*lines[]={", "%c%s%c%c%c", "0};", "main(){", "int idx;", "puts(lines[0]);", "for(idx=0;lines[idx]!=0;idx++){", "printf(lines[1],34,lines[idx],34,',',10);", "}", "puts(lines[2]);", "for(idx=3;lines[idx]!=0;idx++){", "puts(lines[idx]);", "}", "}", 0}; main(){ int idx; puts(lines[0]); for(idx=0;lines[idx]!=0;idx++){ printf(lines[1],34,lines[idx],34,',',10); }
puts(lines[2]); for(idx=3;lines[idx]!=0;idx++){ puts(lines[idx]); } }
|