一个小程序
你正在浏览一篇我早期写的文章,风格和现在差异较大,很多文章观点我现在也可能不赞同。开始考古!Blog搬家! » « 实用的隐藏邮箱的办法!
相关文章
- No Related Posts
08月 20th, 2006 in Focus & News
你正在浏览一篇我早期写的文章,风格和现在差异较大,很多文章观点我现在也可能不赞同。开始考古!main(_){for(–_;putchar(_++["\xcf\xd3\xb1\xaf\xc5\xe4\"\vJ!Mpwf!Zpv\"\v\v\1"]-1););}
拆开看看:
main()
{
int i=1;
char data[]=”\xcf\xd3\xb1\xaf\xc5\xe4\”\vJ!Mpwf!Zpv\”\v\v\1″;
for(–i; putchar(data[i++]-1); )
}
_这个东西有点碍眼。其实它就是一个变量标示符,同i没有区别。
其次是对for循环退出条件的理解。putchar是stdio.h中定义的系统函数,在屏幕上输出传递给他的字符串。返回的值不是十分清楚,但可以肯定地是当传给他的参数是’’时返回0。这样for就可以退出了。
最核心的是对_++["\xcf\xd3\xb1\xaf\xc5\xe4\"\vJ!Mpwf!Zpv\"\v\v\1"]的理解。C中a[b]的等价形式是*(a+b)。所以 _++["\xcf\xd3\xb1\xaf\xc5\xe4\"\vJ!Mpwf!Zpv\"\v\v\1"] 与 “\xcf\xd3\xb1\xaf\xc5\xe4\”\vJ!Mpwf!Zpv\”\v\v\1″[_++] 是等同的,都等价于 *((_++)+”\xcf\xd3\xb1\xaf\xc5\xe4\”\vJ!Mpwf!Zpv\”\v\v\1″) 。”\xcf\xd3\xb1\xaf\xc5\xe4\”\vJ!Mpwf!Zpv\”\v\v\1″ 作为一个字符数组常量,在C编译器看来与其首地址没有区别的。所以for循环的作用就是遍历字符数组”\xcf\xd3\xb1\xaf\xc5\xe4\”\vJ!Mpwf!Zpv\”\v\v\1″,在屏幕上输出其中每个字符的ASCII码-1对应的字符。至于这些字符是什么,自己试试就知道了。
接下来是变量_的初值得问题。原来_作为main的参数,原形为main(int argv, char *args[])。在运行程序的时候默认情况可执行文件的路径作为唯一一个参数传递给main,所以argv(即_)为1。这也是for循环在初始化时对 _作—操作的原因。
你能看懂吗?
Blog搬家! » « 实用的隐藏邮箱的办法!
只有思想的碰撞才能产生火花!请留下你宝贵的评论吧:
黑ICP备06002587号 | Copyright © 2002-2008 berg | Powered by WordPress