gpt4 book ai didi

c - 自复制程序

转载 作者:IT王子 更新时间:2023-10-29 00:04:42 25 4
gpt4 key购买 nike

main(a){printf(a="main(a){printf(a=%c%s%c,34,a,34);}",34,a,34);}

编译后如何 self 复制? printf函数中写34有什么作用?

最佳答案

34 是双引号 (") 字符的 ASCII 字符代码。


继续我的切线评论(这是对 Hofstadter 的“Godel Escher Bach”的引用),这是有效的,因为它是一个 quine,它基本上是一个包含两个元素的配方:数据内核和对该内核的操作,以便在操作完成时复制原始配方。为此,内核和操作几乎完全相同。在你说的程序中,内核就是字符串

 "main(a){printf(a=%c%s%c,34,a,34);}"

操作是程序的其余部分:

 main(a){printf(a=_____,34,a,34);}

其中 ____ 是内核。你会注意到它们看起来本质上是一样的:操作可以通过使用内核作为格式说明符来打印自己(打印内核但不加引号,从而将内核转换为输出中的操作),并将内核本身作为格式说明符(%s)中的一个参数并引用它,在输出中产生内核。

operation(quoted kernel) => unquoted kernel,包括内核的副本,quoted => 这是原始程序。


还有一点:之所以使用这个34业务是因为它通过使用没有引号字符的内核使引用操作变得容易;如果你尝试使用

"main(a){printf(a=\"%s\",a);}"

作为内核,带有一个未加引号的内核

main(a){printf(a="%s",a);}

这会困难得多,因为为了引用内核,您必须对字符串中间的引号进行反斜杠转义。

关于c - 自复制程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596236/

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