[QUOTE]
char *s="#include<stdio.h>\nint main()\n{\n\tprintf(%chello world%c);\n}";
[/QUOTE]
这段是怎么输出的
我写了一个输出源码程序的程序
#include<stdio.h>
main(int argc ,int *argv[])
{
FILE *fp;
int c = 0;
char *ch;
ch = argv[0];
c = strlen(ch);
ch[c-3] = 'c';
ch[c-2] = 0;
if((fp = fopen(ch,"rb")) == NULL)
{
puts("Open file error!");
getch();
exit(1);
}
while((c = fgetc(fp)) != -1)
printf("%c",c);
fclose(fp);
getch();
}
但是这个程序有BUG 就是如果不是在保存后就编译运行就会输出错误结果
关于能输出自己程序的代码的程序之个人理解
#include<stdio.h>
main()
{
char *a="#include<stdio.h>%cmain()%c{%c%cchar *a=%c%s%c;%c%cprintf(a,10,10,10,9,34,a,34,10,9,10,10,10);%c%cgetch();%c}";
printf(a,10,10,10,9,34,a,34,10,9,10,10,10);
getch();
}
终于看懂了这个程序:
我来解释一下:
上面的红色的部分是定义一个字符型的指针a,指向的是引号里面的字符串部分;
上面的蓝色的部分是输出字符型指针a所指向的地址里的内容,也就是引号里的内容;
printf(a,10,10,10,9,34,a,34,10,9,10,10,10);
这里小括号内的第一个a是作为输出字符串的参数传入的,后面的10,10,10,9,34,a,34,10,9,10,10,10都是作为输入格式控制的参数输入的,也就是对应着#include<stdio.h>%cmain()%c{%c%cchar *a=%c%s%c;%c%cprintf(a,10,10,10,9,34,a,34,10,9,10,10,10);%c%cgetch();%c}里面的那么%c,%s,这些数字按字符输出,它们对应的ASCII码刚好是:
9 制表符
10 换行符
34 引号(")
中间的那个a是作为%s的字符串内容传入的!
小弟是这样理解的,有什么不对的地方请各位大虾请教一哈!!
[URL=http://hi.baidu.com/frinklyn]本人百度博客[/URL]