CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

一道笔试题,高手请帮忙

楼主xuxingren(xuxingren)2005-06-03 06:22:54 在 C/C++ / C语言 提问

试题1)  
  用C语言编写一个程序,能够将程序自身显示出来。(程序越短越好)  
  即: 由源程序编译连接生成可执行文件,在源程序已删除的情况下,运行可执行文件,能将源程序的内容显示出来。  
  如: 源程序aaa.c,编译连接生成aaa.exe,然后删除源程序aaa.c,再运行aaa.exe,则在屏幕上显示源程序aaa.c的全部内容,一模一样,包括回车、换行等。  
  注: 要求在没有源程序的情况下,运行可执行文件,能够显示原来源程序的内容。因为没有源程序,可执行文件就无法再读取源程序,另外也不需可执行文件来删除源程序。  
  (不能使用文件操作来读取源程序)  
  问题点数:0、回复次数:40Top

1 楼liujingfu123(Oh_My_GoD)回复于 2005-06-03 08:18:19 得分 0

MARK!Top

2 楼foochow(无聊,灌水......)回复于 2005-06-03 08:19:25 得分 0

mark!!Top

3 楼mefit(何足道)回复于 2005-06-03 08:24:26 得分 0

这个好像在c专家编程有个类似的例子吧Top

4 楼clear117(小风)回复于 2005-06-03 10:05:32 得分 0

mark!!!Top

5 楼barbara2008(亦农)回复于 2005-06-03 11:12:39 得分 0

#include   <iostream.h>  
  #include   <fstream.h>  
   
  int   main()  
  {  
          char   ch;  
          ifstream   fileA(__FILE__);  
          if   (fileA)  
          {  
                  ofstream   fileB("bak.dat");  
                  while   (fileA.get(ch))   fileB   <<   ch;  
          }  
          ifstream   fileC("bak.dat");    
          if   (fileC)   while   (fileC.get(ch))   cout   <<   ch;  
  return   0;  
  }Top

6 楼cmoring(my study will go on)回复于 2005-06-03 11:13:38 得分 0

根据exe读出.c   程序,估计不大可能,反编译也未必能完全成,何况把汇编代码“翻译”成.c代码   复杂!一个简单算法在汇编就是很多代码的。我个人的简单理解,欢迎大家批评指点。Top

7 楼whatsouta(某疯子)回复于 2005-06-03 11:31:56 得分 0

好高深Top

8 楼magicsnake(北极狐)回复于 2005-06-03 11:39:08 得分 0

标志一下,看看高手们怎么做Top

9 楼wfwater(淡水)回复于 2005-06-03 11:43:16 得分 0

实在想不通,希望能看到高手精彩的解答。Top

10 楼tian_su(问天(渺小得惶恐))回复于 2005-06-03 11:58:43 得分 0

UPTop

11 楼QunKangLi(心里面疼得有点发酸 一定是有雾来了 打湿了我的眼眶)回复于 2005-06-03 12:05:04 得分 0

#include   <stdio.h>    
  int   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   "#include   <stdio.h>%cint   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   %c%s%c,   34   )   ;   }   ",   34   )   ;   }  
  Top

12 楼QunKangLi(心里面疼得有点发酸 一定是有雾来了 打湿了我的眼眶)回复于 2005-06-03 12:07:30 得分 0

VC6中测试的,如果按纯C标准,需要删除两个const单词。Top

13 楼QunKangLi(心里面疼得有点发酸 一定是有雾来了 打湿了我的眼眶)回复于 2005-06-03 12:08:24 得分 0

10是ASCII字符'\n',34是ASCII字符'\"'Top

14 楼tian_su(问天(渺小得惶恐))回复于 2005-06-03 12:17:10 得分 0

强Top

15 楼Cuiql(向前冲,向后看)回复于 2005-06-03 12:48:14 得分 0

学习Top

16 楼bidongliang_2000()回复于 2005-06-03 13:54:19 得分 0

厉害啊,可是俺不会用这么复杂的printf函数,所以写出来胖了好多  
  换行的问题只要在里面加上'\n'就行了,和'\'和处理方法一样  
  #include<iostream>    
  #include<string>    
  using   namespace   std;  
  void   main(){  
  string   self("#include<iostream>   #include<string>   using   namespace   std;   void   main(){string   self(;   string   a(\");string   b(\");string   c(});self.insert(81,self);self.insert(81,a);self.erase(163,1);self.insert(174,b);self.insert(187,b);self.insert(347,));self.insert(347,a);self.insert(362,a);self.insert(362,b);self.insert(363,a);self.insert(376,b);self.insert(376,b);self.insert(376,a);self.insert(391,a);self.insert(393,a);cout<<self;}");  
  string   a("\"");  
  string   b("\\");  
  string   c("}");  
  self.insert(81,a);  
  self.insert(82,self);  
  self.erase(163,1);  
  self.insert(174,b);  
  self.insert(187,b);  
  self.insert(347,")");  
  self.insert(347,a);  
  self.insert(362,a);  
  self.insert(362,b);  
  self.insert(363,a);  
  self.insert(376,b);  
  self.insert(376,b);  
  self.insert(376,a);  
  self.insert(391,a);  
  self.insert(393,a);  
  cout<<self;  
  }Top

17 楼mostideal(三甲)回复于 2005-06-03 15:25:44 得分 0

mark!!!Top

18 楼diterlish(Sesshoumaru)回复于 2005-06-03 16:32:50 得分 0

学习Top

19 楼jingyueid(干宁)回复于 2005-06-03 18:34:11 得分 0

#include   <stdio.h>    
  int   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   "#include   <stdio.h>%cint   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   %c%s%c,   34   )   ;   }   ",   34   )   ;   }  
   
  -------------------------------  
  好漂亮的代码。  
  Top

20 楼hanxingwuqing(无效参数)回复于 2005-06-03 20:03:38 得分 0

回复人:   QunKangLi(To   iterate   is   human,to   recurse   divine)   (   )   信誉:100     2005-06-03   12:05:00     得分:   0      
     
     
        #include   <stdio.h>    
  int   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   "#include   <stdio.h>%cint   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   %c%s%c,   34   )   ;   }   ",   34   )   ;   }  
   
       
     
  对于此人,此代码,俺只能说两个字~~~~~~~~~~~~~~~~~~~~~崇拜!!!!!!!!!!!!!!Top

21 楼pippen2333(学习是为了赚钱)回复于 2005-06-03 20:03:58 得分 0

学习,mark啥意思啊?Top

22 楼minrr(平平淡淡)回复于 2005-06-03 20:32:38 得分 0

先抄下来!Top

23 楼skingsky(菜鸟的烦恼)回复于 2005-06-03 21:23:41 得分 0

我敢肯定地说在CSDN上还没有人能编出这个程序来!  
  这个程序是由一个得图灵奖的计算机大师编出来的!  
  图灵奖大家知道吧!计算机最高荣誉奖。Top

24 楼blueice718(冰蓝)回复于 2005-06-03 21:38:18 得分 0

文件操作不会,学习~~~Top

25 楼cao12m(★草上飞★)回复于 2005-06-03 21:42:29 得分 0

给你说一个不可行的办法      
  在计算机上装TC   和VC++二中编译器   用TC写写完后就自动在VC++中生成代码   这就是BAR技术呵呵Top

26 楼NetsEagle(指针)回复于 2005-06-03 22:04:07 得分 0

又是这个题,翻翻老帖子,都好几遍了Top

27 楼zzm7000()回复于 2005-06-03 22:44:00 得分 0

barbara2008(亦农)   QunKangLi(To   iterate   is   human,to   recurse   divine)   的方法都是搞笑作弊法Top

28 楼SuperZXTMaster(扬帆)回复于 2005-06-03 23:44:14 得分 0

 
  #include   <iostream>  
  using   namespace   std;  
  int   main()  
  {  
  cout<<"#include   <iostream>\nusing   namespace   std;\nint   main()\n{\ncout<<\"#include   <iostream>\nusing   namespace   std;\nint   main()\n{\nreturn   0;\n}\";\nreturn   0;\n}";  
   
  return   0;  
  }Top

29 楼SuperZXTMaster(扬帆)回复于 2005-06-03 23:45:54 得分 0

总是感觉这样的题目很没有意思.  
  也体现不出什么好的编程思想和功底Top

30 楼zx_name({电冷心})回复于 2005-06-04 17:39:46 得分 0

有人把哪个得图灵奖的人的实现帖一下吗?  
   
  学习一下Top

31 楼xuxingren(xuxingren)回复于 2005-06-07 06:18:58 得分 0

有这样的提示,要求编写出完整的程序,这里有一个例程可供参考,但是还不完善,显示内容和源程序还 不一模一样,可以在这个基础上做完成。  
  例程:  
  main(){char*s="main(){char*s=\"%s\";printf(s,s);}";printf(s,s);}  
  Top

32 楼xuxingren(xuxingren)回复于 2005-06-07 06:19:09 得分 0

有这样的提示,要求编写出完整的程序,这里有一个例程可供参考,但是还不完善,显示内容和源程序还 不一模一样,可以在这个基础上做完成。  
  例程:  
  main(){char*s="main(){char*s=\"%s\";printf(s,s);}";printf(s,s);}  
  Top

33 楼zhouhuaikun(怀空)回复于 2005-06-07 08:18:29 得分 0

markTop

34 楼mccxj(老鼠不逛街)回复于 2005-06-07 08:35:55 得分 0

#include   <stdio.h>    
  int   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   "#include   <stdio.h>%cint   main()   {   const   char   *p;   return   printf(   p,   10,   34,   p   =   %c%s%c,   34   )   ;   }   ",   34   )   ;   }  
  ----------------------------------------------------------------------------  
  汗。。此等强人。。。。pf。。Top

35 楼xnlcx(J2EE.Net)回复于 2005-06-07 08:46:21 得分 0

 
  顶一下  
  Top

36 楼James_ht(顺风飞扬)回复于 2005-06-07 09:27:36 得分 0

强。学习。Top

37 楼cqpp()回复于 2005-06-07 14:37:28 得分 0

#define   print_macro(x)   x\  
          printf("print_macro(%s);\n",   #x   );  
   
          print_macro(  
                  int   i;  
                  int   j;  
                  int   c;  
                  i   =   0;  
                  j   =   0;  
                  c   =   0;    
                  ......   )Top

38 楼lalalalala(van)回复于 2005-06-07 15:49:14 得分 0

真的是笔试题吗?看来大家以后去笔试都要把这个程序被下来了Top

39 楼flysky_yzu(天中天(学海无涯))回复于 2005-06-07 16:59:51 得分 0

MARKTop

40 楼manya2005(mydio)回复于 2005-06-07 17:40:52 得分 0

学习ING~~~Top

相关问题

  • 请问:一道笔试题
  • 请问:一道笔试题
  • 一道笔试题
  • 一道笔试题
  • 一道笔试题
  • 一道笔试题
  • 一道笔试题
  • 一道笔试题
  • 一道笔试题!请求帮忙!
  • 请问:一道微软笔试题

关键词

  • vc++
  • 试题
  • 文件
  • 执行
  • 代码
  • 计算机
  • 内容
  • vc
  • 源程序
  • self

得分解答快速导航

  • 帖主:xuxingren

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo