最近看了BWK写的The Practice of Programming,里面有道题很有意思:写一个程序,把自身的源代码打印出来。显然,这不是让你直接去读程序的源文件。我尝试了一下,还蛮有挑战性的,不过最后还是写了一个出来。整个程序写在一行上,就是下面这句(共513字节):
int main(){char *s="int main(){char *s=SELF;char t[1024]={0};int i=0,j=0,k=0,l=0;while(s[l])l++;while(s[i]){if(i+4;char t[1024]={0};int i=0,j=0,k=0,l=0;while(s[l])l++;while(s[i]){if(i+4<l && s[i]==0x53 && s[i+1]==0x45 && s[i+2]==0x4C && s[i+3]==0x46){t[j++]=0x22;for(;k<l;){t[j++]=s[k++];}t[j++]=0x22;i+=4;}else{t[j++]=s[i++];}}printf(t);return 0;}
|
当然,这是一个有效的C语言程序,里面只使用了一个IO函数printf()。你可以用gcc之类的编译器把它编译出来,运行,看看它的输出。 如果你想搞清楚程序中都做了些什么的话,我建议你把上面这行代码拷贝到一个代码编辑器中,将其格式化之后再来分析。其实里面只用了一个小trick而已。嘿呀嘿。
阅读(1102) | 评论(0) | 转发(0) |