Quine程序
目录
介绍
Quine 程序是指自生成程序, 它不接受输入, 运行它会输出程序源代码.
思路
思路(以C语言为例):
- 先在代码任意位置定义一个字符串 s 与一个 printf 函数.
- 先构建字符串 s 的内容, 使其为程序源代码, 把其中 s 赋值部分留一个 s=%c%s%c, 在吧其中的转义字符修改为%c 并记录.
- 修改两个 printf 的部分, 把%s 位置输入为字符串 s, 其它位置输入应该的转义字符 ASCII 码.
如果使用 python, 其中有 repr()可以输出字符串对象本身, 或者使用%r 来调用, 如:
s="\n"
print(repr(s),end=" ")
print("%r"%s)
# 输出: '\n' '\n'示例
C 语言:
#include <stdio.h>
char* s="#include <stdio.h>%cchar* s=%c%s%c;int main(){printf(s,10,34,s,34);return 0;}";int main(){printf(s,10,34,s,34);return 0;}因为使用 \n \" 会使 printf 函数中的第二个 s 字符串中的\n \" 也被转义, 如果是用以下代码:
#include <stdio.h>
char* s="#include <stdio.h>\nchar* s=\"%s\";int main(){printf(s,s);return 0;}";int main(){printf(s,s);return 0;}输出为:
#include <stdio.h>
char* s="#include <stdio.h>
char* s="%s";int main(){printf(s,s);return 0;}";int main(){printf(s,s);return 0;}Python:
s='s=%r\nprint(s%%s)'
print(s%s)