我如何[" string"]如何作为条件陈述?

时间:2015-12-16 04:12:32

标签: c for-loop conditional-statements obfuscation

在IOCCC中查看this obfuscated code。我试图理解这一点。

int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

意思是:

int i;
main()
{
    for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hello, world!\n",'/'/'/'));
}
read(j,i,p)
{
    write(j/p+p,i---j,i/i);
}

请解释一下:i["]<i;++i){--i;}"]

这如何作为条件陈述?

1 个答案:

答案 0 :(得分:6)

C索引有点时髦。 dev.new()大致相当于a[b]*(a+b)降级为指向第一个元素的指针)。但添加是可交换的,因此aa[b]执行相同的操作。因此:

b[a]

真的只是:

i["]<i;++i){--i;}"]

但重新排序使得它看起来像一个标准化的循环,如果你错过了引号,就会混淆。由于除"]<i;++i){--i;}"[i] 终止符之外,字符串中的所有值都不为零(因此为“true”),因此当NUL等于该字符串文字的长度时,循环将结束。