Quine
什么是Quine?根据Wiki上的定义,Quine是一个计算机程序,它不需要输入,却可以将自己的源代码输出。
一般的Quine程序结构
Quine程序一般由两部分组成,一部分是代码,另一部分是数据(以保存源代码)。在最常见的Quine中,程序会将自己输出两次,一次用来填充代码部分,一次用来填充数据部分
Quine案例分析
来看下面这个Quine
char*f="char*f=%c%s%c;main(){printf(f,34,f,34,10);}%c";main(){
printf(f,34,f,34,10);}
这个Quine的优点在于,精简,我们可以看到,程序将自己输出了两次,很巧妙地利用了printf函数的格式化,将“数据”填充在了“代码”之中。需要注意的是,这里只能用34表示双引号而不能直接把双引号写到字符串里,否则就需要转义,一旦需要转义,那么程序的代码便多了两个斜杠,为了输出这两个斜杠,就需要继续在数据部分插入转移的斜杠……如此往复,会发现这样行不通,程序不可能输出自己。因此,在一般的Quine中,我们避免使用字符串转义,它有可能为我们带来不必要的麻烦。
我自己编写的Quine
为了更好地理解这一思想,我自己也编写了一段Quine程序,如下:
#include