鱼C论坛

 找回密码
 立即注册
查看: 3505|回复: 11

求分解,改自国际C语言混乱代码大赛1984:Anonymous

[复制链接]
发表于 2012-6-27 17:28:09 | 显示全部楼层 |阅读模式
20鱼币
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"Love \
FishC.com!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

求分解至正常人可以读懂的程序代码。

最佳答案

查看完整内容

这段代码在linux下编译通过了,输出结果Love FishC.com,我做了几个测试才分析出其中的缘由,在这里给大家一起分享下我的测试过程,为了更好的理解这段程序,我们需要知道以下几个概念: 1、i是全局变量,默认初始化为0; 2、for循环语句需要熟悉,for循环一共有三个部分:第一部分是初始化,第二部分是for循环结束条件,第三部分是变量变化;for循环后是循环体的执行语句。 第一部分初始化是分号,意味着没有初始化 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-27 17:28:10 | 显示全部楼层
本帖最后由 fujian810 于 2012-6-28 08:22 编辑

     这段代码在linux下编译通过了,输出结果Love FishC.com,我做了几个测试才分析出其中的缘由,在这里给大家一起分享下我的测试过程,为了更好的理解这段程序,我们需要知道以下几个概念:
1、i是全局变量,默认初始化为0;
2、for循环语句需要熟悉,for循环一共有三个部分:第一部分是初始化,第二部分是for循环结束条件,第三部分是变量变化;for循环后是循环体的执行语句。
      第一部分初始化是分号,意味着没有初始化。
      第二部分是for循环结束语句i[  "]<i;++i){--i;}"  ] ,只要i[  "]<i;++i){--i;}"  ] 大于0,for循环就一直持续,这里很多人不理解,但是学过汇编的同志看到这里会会心一笑,还记得汇编寻址中的3[bx]么,如果[bx]是代表数据段的数组,那么3[bx]相当于该数组的第4个元素(下标从0开始),因此i[  "]<i;++i){--i;}"  ] 的含义是什么呢?"]<i;++i){--i;}"是内存中一个字符串数组,而i[  "]<i;++i){--i;}"  ]就代表这个字符串数组中i下标,即a="]<i;++i){--i;}",i[  "]<i;++i){--i;}"  ] = a,故而0[ "]<i;++i){--i;}"]就是']',']'的ascii值显然是大于0的,那么什么情况i[  "]<i;++i){--i;}"  ] 为0呢?我们看下 "]<i;++i){--i;}"这个字符串长度14,因此,14 ["]<i;++i){--i;}"]的返回值为0,即i为14时for循环结束。
      第三部分是变量的变化,通常的for循环中是i++,这里是一个函数,read函数,下面我们来分析下read函数。read('-'-'-',i+++"Love FishC.com!\n",'/'/'/'));首先看下read函数的第一个参数:'-'-'-'是什么意思呢?'-'代表是一个字符,'-'-'-'显然代表着'-'字符减去'-'字符值为0,第二个参数是i+++"Love FishC.com!\n",这个语句可以分解成两句:i+"Love FishC.com!\n";i++;i+"Love FishC.com!\n"的分析是这样的,"Love FishC.com!\n"是一个字符串数组,i+"Love FishC.com!\n"代表这个字符串数组的地址偏移为i;第三个参数是'/'/'/',有了第一个参数的基础,这里可以知道'/'/'/'=1;
        第三部分read函数的原型是read(j,i,p),这里j=0,i = i+++"Love FishC.com!\n",p = 1;
        现在我们来分析下重头戏write函数:write(j/p+p,i---j,i/i),相当于write(1, i+++"Love FishC.com!\n"--,1),这里需要了解一个概念,write函数的原型是write(fd,buf,len),将buf中len长度输出到fd中,在linux中测试是将buf的内容输出到终端中,这里的fd的值可以任意,不一定是1, i+++"Love FishC.com!\n"--有了前面的 i+++"Love FishC.com!\n"分析,再多两个--也无所谓了,分析照旧,只是地址有偏移而已,我们知道函数调用变量非指针格式,因此值在调用后发生变化。
        结论:下面我们来串一下这段程序,这个程序实际是这样的,我给出一个伪算法

       q = "Love FishC.com!\n";
       while(i<strlen( "]<i;++i){--i;}"))
       {
                  write(1,q,1);
                  i++;
       }



       因此结果是输出字符串"Love FishC.com!\n"前14("]<i;++i){--i;}"的长度)个字符Love FishC.com

乱码分析.rar

89.87 KB, 下载次数: 11

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 17:40:14 | 显示全部楼层
本帖最后由 小至 于 2012-6-27 17:51 编辑

int i;
main()
{  
for( ;  i[  "]<i;++i){--i;}"  ]  ; read( '-'-'-' ,  i+++"Love \FishC.com!\n" , '/'/'/' )   );

}

read(j,i,p)
{
write(j/p+p ,i---j , i/i );
}





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 17:44:46 | 显示全部楼层
我没明白:["]    "] 是干啥用的。。还有几个变量!!呢。。无定义么!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 19:52:50 | 显示全部楼层
int i;

main()
{
        for( ; i[""] ; read('-'-'-',i++ + "Love FishC.com!\n",'/'/'/'));
}

read(j,i,p)
{
write(j/p+p,i---j,i/i);
}

就只能改成这样了……还通不过编译
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 19:56:55 | 显示全部楼层
其中有很多符号 比如 【】 这个都不对称...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 20:37:06 | 显示全部楼层
int i;
main()
    {
       for( ;
            i[  
            "]&lt;i;++i){--i;}"
            ]
            ;read('-'-'-',i+++"Love \FishC.com!\n",'/'/'/')
           );
     }
read(j,i,p)
    {
    write(j/p+p,i---j,i/i);
     }   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 21:54:25 | 显示全部楼层

  1. int i;

  2. main()
  3. {
  4.         for(; i["]<i;++i){--i;}"] ; read(0 , i+++"Love \FishC.com!\n" , 1) );

  5. //循环的次数是在搞不清楚
  6. //i["]<i;++i){--i;}"] 这是个数组用下标寻址(此条是循环条件:条件表达式)
  7. //read(0 , i+++"Love \FishC.com!\n" , 1) (这是增量)
  8. }

  9. read(0, i ,1)//i = i+++"Love \FishC.com!\n"
  10. {
  11.          write(1 , i-- , 1);//从i--(地址)处内存空间中提取1个字符写入到参数1(地址)处内存空间所指的文件
  12. }

  13. 到这里时候实在不行了,后面的只能坐等答案了。
复制代码

评分

参与人数 1鱼币 +10 收起 理由
小甲鱼 + 10 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 22:17:41 | 显示全部楼层
int i;
main()
{
      for(;i["]<i;++i) {--i;} "]; read('-'-'-',i+++"Love \FishC.com!\n",'/'/'/'));
}
        read(j,i,p)
        {
        write(j/p+p,i---j,i/i);
        }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 22:18:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-27 22:53:06 | 显示全部楼层
int i;
main ()
{
  for (; i["]<i;++i){--i;}"];
read ('-' - '-', i++ + "Love \
FishC.com!\n", '/' / '/'));
}

read (j, i, p)
{
  write (j / p + p, i-- - j, i / i);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-28 00:28:17 | 显示全部楼层
小弟搞的优点迷糊了,明天再看!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 20:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表