免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sega6666
打印 上一主题 下一主题

如何让程序打印它自己?? [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2004-10-08 17:20 |只看该作者

如何让程序打印它自己??

呵呵,还可以用__FILE__来实现哦。不过,是偷懒的办法了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
12 [报告]
发表于 2004-10-08 17:21 |只看该作者

如何让程序打印它自己??

^_^,FH兄发上来了哈。

论坛徽章:
0
13 [报告]
发表于 2004-10-08 17:43 |只看该作者

如何让程序打印它自己??

无语,一个刚学c的学生碰到这样的老师只能自认倒霉了--不引导学生学习一些实用的编程技术,编程思想却来这么一个偏、怪的题目,唉........
这位同学,这个老师的课不上也罢了,找来老谭的书或者K&R的书自己来看吧(这两本书都有习题集),然后自己上机实践吧,不懂的上来问吧,不要给这个老师引到一些偏门去了。

论坛徽章:
0
14 [报告]
发表于 2004-10-08 18:09 |只看该作者

如何让程序打印它自己??

我觉得他的要求是打印程序,而不是打印源代码,思路是这样的,通过读取进程表等方法可获得当前进程的路径,open这个文件,然后按16进制打印出来就可以了

论坛徽章:
0
15 [报告]
发表于 2004-10-08 18:20 |只看该作者

如何让程序打印它自己??

如何“生成源代码”,按 it 界的标准,算得上是历史悠久的问题了。它是前辈黑客的游戏,请参考这篇文章,Ken Thompson 得图灵奖后发表的演讲:

http://www.acm.org/classics/sep95/

这篇文章与 unix 历史上的  login 后门有关。

论坛徽章:
0
16 [报告]
发表于 2004-10-08 20:42 |只看该作者

如何让程序打印它自己??

哦,多谢前辈们!今天我刚下课回来!老师出的这个只是个思考题!
他说的答案是
#include<stdlib.h>;
void main()
{
     system("type a.c"/*这个程序保存成a.c
}

对不起,之前没说清楚我现在学的是C用的是VC++6.0

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2004-10-08 21:15 |只看该作者

如何让程序打印它自己??

晕死,你们老师的答案也太……

论坛徽章:
0
18 [报告]
发表于 2004-10-08 21:29 |只看该作者

如何让程序打印它自己??

这个答案怎么了????说完整啊,很想知道,谢谢

论坛徽章:
0
19 [报告]
发表于 2004-10-08 21:39 |只看该作者

如何让程序打印它自己??

我也晕。

按你们老师的做,他说得没错。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
20 [报告]
发表于 2004-10-08 22:35 |只看该作者

如何让程序打印它自己??

  1. 1。
  2. char*f="main(){putchar('c');putchar('h');putchar('a');putchar('r');
  3. putchar('*');&
  4. putchar('f');putchar('=');putchar(34);printf(f);putchar(34);
  5. putchar(';');&
  6. putchar(10);printf(f);putchar(10);}";
  7. main(){putchar('c');putchar('h');putchar('a');putchar('r');
  8. putchar('*');putchar('f');&
  9. putchar('=');putchar(34);printf(f);putchar(34);putchar(';');
  10. putchar(10);&
  11. printf(f);putchar(10);}

  12. 2。
  13. char*f="char*f=;main(){f[7]=0;printf(f);putchar(34);f[7]=';';
  14. printf(f);&
  15. putchar(34);f[8]=0;printf(&f[7]);f[8]='m';putchar(10);
  16. printf(&f[8]);putchar(10);}";
  17. main(){f[7]=0;printf(f);putchar(34);f[7]=';';printf(f);putchar(34);&
  18. f[8]=0;printf(&f[7]);f[8]='m';putchar(10);printf(&f[8]);
  19. putchar(10);}

  20. 3。
  21. char*f="char*f=%c%s%c;%cmain(){printf(f,34,f,34,10,10);}%c";
  22. main(){printf(f,34,f,34,10,10);}

  23. 4。
  24. char a='"';char b='\n';char c='\\';
  25. char*f="char a='%c';char b='%cn';char c='%c%c';%cchar*f=%c%s%c;%cmain(){&
  26. printf(f,a,c,c,c,b,a,f,a,b,b);}%c";
  27. main(){printf(f,a,c,c,c,b,a,f,a,b,b);}

  28. 5。
  29. char*lines[]={
  30. "char*lines[]={",
  31. "%c%s%c%c%c",
  32. "0};",
  33. "main(){",
  34. "int idx;",
  35. "puts(lines[0]);",
  36. "for(idx=0;lines[idx]!=0;idx++){",
  37. "printf(lines[1],34,lines[idx],34,',',10);",
  38. "}",
  39. "puts(lines[2]);",
  40. "for(idx=3;lines[idx]!=0;idx++){",
  41. "puts(lines[idx]);",
  42. "}",
  43. "}",
  44. 0};
  45. main(){
  46. int idx;
  47. puts(lines[0]);
  48. for(idx=0;lines[idx]!=0;idx++){
  49. printf(lines[1],34,lines[idx],34,',',10);
  50. }

  51. puts(lines[2]);
  52. for(idx=3;lines[idx]!=0;idx++){
  53. puts(lines[idx]);
  54. }
  55. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP