Imo*_*lis 8 c printf quine output
我越想了解这个困惑的谜,我就越想放弃.
char *s = "char *s = %c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)
这个单行源代码如何在程序执行时生成完全相同的输出,这种程序有什么共同的概念吗?
Fil*_*ves 11
这被称为奎因.
那么让我们看看是main()做什么的:
printf(s,34,s,34);
Run Code Online (Sandbox Code Playgroud)
34是字符的ASCII码"(双引号),因此它与:
printf(s, '"', s, '"');
Run Code Online (Sandbox Code Playgroud)
第一个参数printf(3)是格式字符串.传递的字符串是:
"char *s = %c%s%c; main(){printf(s,34,s,34);}"
Run Code Online (Sandbox Code Playgroud)
因此,printf(3)将输出正是这样,但要注意%c,%s和%c格式说明,其指示printf(3)打印字符,然后是字符串,然后在那个地方另一个角色,分别是第2,第3和第4个参数.
正如我们所看到的那样,字符都是",字符串也是s(相同的字符串).所以程序输出是:
char *s = "X"; main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)
程序中X的字符串s在哪里.所以我们得到这个作为输出:
char *s = "char *s = %c%s%c; main(){printf(s,34,s,34);}"; main(){printf(s,34,s,34);}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这是程序源本身.
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |