用C语言编写一个程序,能够将程序自身显示出来。(程序越短越好)
即:由源程序编译连接生成可执行文件,在源程序已删除的情况下,运行可执行文件,能将源程序的内容显示出来。
如:源程序aaa.c,编译连接生成aaa.exe,然后删除源程序aaa.c,再运行aaa.exe,则在屏幕上显示源程序aaa.c的全部内容,一模一样,包括回车、换行等。
注:要求在没有源程序的情况下,运行可执行文件,能够显示原来源程序的内容。因为没有源程序,可执行文件就无法再读取源程序,另外也不需可执行文件来删除源程序。
(不能使用文件操作来读取源程序)
#include<stdio.h>
main()
{
char *c="#include<stdio.h>%cmain()%c{%cchar *c=%c%s%c;%cprintf(c,10,10,10,34,c,34,10,10);%c}";
printf(c,10,10,10,34,c,34,10,10);
}
这个版本的核心就在于printf的参数上:
大家知道printf第一个参数是个字符串,定义了本次输出的格式,注意其中有一个%s,此处它匹配的参数正好是那个字符串本身,因此达到了把这个字符串输出两次的目的,其他部分只要照着main函数的样子写就行了,注意下不要使用引号和转义字符/,不然会给你带来很大的困扰。