无法理解混淆的C代码

用户名

我不明白这一点。请解释。

编辑:它打印:'hello, world!'

#include <stdio.h>

int i;
main()
{
  for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\o, world!\n",'/'/'/'));
  //For loop executes once, calling function read with three arguments.
}

read(j,i,p)
{
  write(j/p+p,i---j,i/i);  //how does it work? like printf?
}
肖恩·鲍威尔(Shane Powell)

坏了你有:

for({initial expr};{conditional expr};{increment expr})

'{initial expr}'是空白的,因此它什么也不做。“ {conditional expr}”是'i["]<i;++i){--i;}"]'

这与

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

要么

const char* str = "]<i;++i){--i;}";
for (; str[i]; )

因此它一直循环播放,直到表达式为假(即在字符串末尾击中null)。

{increment expr}

read('-'-'-',i+++"hell\o, world!\n",'/'/'/')

如果将其分解为读取参数,则具有:

'-' - '-' == char('-') - char('-') == 0

对于参数二,您具有:

i+++"hell\o, world!\n"

等同于:i ++ +“ hell \ o,世界!\ n”

因此它增加了'i'变量,这意味着for循环将循环搜索条件字符串“]中的字符数

第一次,您最终得到:

0 + "hell\o, world!\n"

循环第二次将是1 +“ hell \ o,世界!\ n”,依此类推。

因此,第二个参数是指向“ hell \ o,世界!\ n”的指针。

第三个参数是:

'/'/'/' == '/' / '/' == char('/') / char('/') == 1

因此,第三个参数始终为1。

现在,我们分解调用write的read函数:

write(j/p+p,i---j,i/i);

有三个参数,第一个是:

j/p+p where j == 0, p == 1 so 0/1+1 == 1.

如果读取,则写入功能1的链接被硬编码以写入标准输出。

要写入的第二个参数是

i---j

这是相同的i-- - j,其中i是指向字符串的指针,并且j = 0由于i被后减'- 0',因此它什么也不做,什么也不做,只是将指针传递给write函数。

第三个参数是'i / i“,它将始终为” 1

因此,每次调用“读取”时,每次都会在“ hell \ o,world!\ n”字符串中写入一个字符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章