Chinaunix首页 | 论坛 | 博客
  • 博客访问: 990284
  • 博文数量: 102
  • 博客积分: 10120
  • 博客等级: 上将
  • 技术积分: 2754
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-13 23:00
文章分类

全部博文(102)

文章存档

2011年(6)

2010年(55)

2009年(16)

2008年(25)

分类:

2008-09-21 23:03:46

最近看了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) |
给主人留下些什么吧!~~