#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();
}
这段代码的功能是输出自己的源代码 必须使用头文件
当初是看到兰大acm培训教材里有这个题目
百思不得其解
只好去找答案了
网上的解释:
上面的红色的部分是定义一个字符型的指针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 引号(")
32 空格
以下是我仿照改写的c99标准版
从c99开始函数的返回值不再默认为int
所以 main()是错误的写法
而void main() 也是不合标准的写法
可悲我们的教科书上还是一堆void main()
妈的 连个main函数都写不对 还好意思来骗学生的钱
#include<stdio.h>
int main()
{
char *a=
"#include<stdio.h>%cint%cmain()%c{%c%cchar*a=%c%s%c;%c%cprintf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);%c%cgetch();%creturn%c0;%c}";
printf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);
getchar();
return 0;
}
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();
}
这段代码的功能是输出自己的源代码 必须使用头文件
当初是看到兰大acm培训教材里有这个题目
百思不得其解
只好去找答案了
网上的解释:
上面的红色的部分是定义一个字符型的指针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 引号(")
32 空格
以下是我仿照改写的c99标准版
从c99开始函数的返回值不再默认为int
所以 main()是错误的写法
而void main() 也是不合标准的写法
可悲我们的教科书上还是一堆void main()
妈的 连个main函数都写不对 还好意思来骗学生的钱
#include<stdio.h>
int main()
{
char *a=
"#include<stdio.h>%cint%cmain()%c{%c%cchar*a=%c%s%c;%c%cprintf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);%c%cgetch();%creturn%c0;%c}";
printf(a,10,32,10,10,9,34,a,34,10,9,10,10,10,32,10);
getchar();
return 0;
}