gpt4 book ai didi

c - 无法理解混淆的 C 代码

转载 作者:太空狗 更新时间:2023-10-29 16:42:54 25 4
gpt4 key购买 nike

我无法理解这一点。请解释。

编辑:它打印:'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?
}

最佳答案

崩溃是因为你有:

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, world!\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 ,因为我是后递减的,所以什么都不做,'- 0'什么都不做,它只是将指针传递给写入函数。

第三个参数是'i / i ' 永远是 1 .

因此,对于每次调用“read”,它每次都会从“hell\o, world!\n”字符串中写入一个字符。

关于c - 无法理解混淆的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22447338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com