LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2379|回复: 25

一道C语言试题,请大家指点

[复制链接]
发表于 2005-3-31 19:56:12 | 显示全部楼层 |阅读模式
用C语言编写一个程序,能够将程序自身显示出来。(程序越短越好)
即:        由源程序编译连接生成可执行文件,在源程序已删除的情况下,运行可执行文件,能将源程序的内容显示出来。
如:        源程序aaa.c,编译连接生成aaa.a,然后删除源程序aaa.c,再运行aaa.a,则在屏幕上显示源程序aaa.c的全部内容,一模一样,包括回车、换行等。
注:        要求在没有源程序的情况下,运行可执行文件,能够显示原来源程序的内容。因为没有源程序,可执行文件就无法再读取源程序,另外也不需可执行文件来删除源程序。
        (不能使用文件操作来读取源程序)
发表于 2005-3-31 20:28:13 | 显示全部楼层
能实现吗?
回复 支持 反对

使用道具 举报

发表于 2005-3-31 20:34:45 | 显示全部楼层

  1. char *str="int main()\n"
  2. "{\n"
  3. "    char *p;\n"
  4. "\n"
  5. "    printf("char *str=%c", 34);\n"
  6. "    for (p=str; *p; p++) {\n"
  7. "        if (*p == 34)\n"
  8. "            printf("%c%c", 92, *p);\n"
  9. "        else if (*p == 10)\n"
  10. "            printf("%cn%c%c%c", 92, 34, 10, 34);\n"
  11. "        else\n"
  12. "            putchar(*p);\n"
  13. "    }\n"
  14. "    printf("%c%c%c%c%s%c", 34, 59, 10, 10, str, 10);\n"
  15. "\n"
  16. "    return 0;\n"
  17. "}";

  18. int main()
  19. {
  20.     char *p;

  21.     printf("char *str=%c", 34);
  22.     for (p=str; *p; p++) {
  23.         if (*p == 34)
  24.             printf("%c%c", 92, *p);
  25.         else if (*p == 10)
  26.             printf("%cn%c%c%c", 92, 34, 10, 34);
  27.         else
  28.             putchar(*p);
  29.     }
  30.     printf("%c%c%c%c%s%c", 34, 59, 10, 10, str, 10);

  31.     return 0;
  32. }
复制代码

我编译运行后用diff比较过,应该没问题,但有时复制粘贴以后格式上可能需要少许调整。
回复 支持 反对

使用道具 举报

发表于 2005-3-31 21:46:30 | 显示全部楼层
我想了解一下有何意义?
回复 支持 反对

使用道具 举报

发表于 2005-3-31 22:38:43 | 显示全部楼层
有卸任就喜欢无聊
回复 支持 反对

使用道具 举报

发表于 2005-4-1 09:30:53 | 显示全部楼层
Post by Linux_Lyb
我想了解一下有何意义?

作为这道题本身来讲只是训练一些基本的编程技巧,不算太大的意义。但我觉得二楼的问题很有意义,我的第一感觉也是问这个问题。

其实世界上绝大多数问题用计算机是解不了的,可是一般的程序员没有感觉到,因为他们只是单纯得实现前人早已证明可以实现的东西。

说实话,做了一个程序就证明这个东西可以实现多少让人有些失望。
回复 支持 反对

使用道具 举报

发表于 2005-4-1 18:05:49 | 显示全部楼层
楼上的做法好象很牵强吧!
回复 支持 反对

使用道具 举报

发表于 2005-4-1 22:48:40 | 显示全部楼层
欢迎来个不牵强的
回复 支持 反对

使用道具 举报

发表于 2005-4-2 01:05:47 | 显示全部楼层
用个人爱好来解释,比较不牵强,呵呵~
回复 支持 反对

使用道具 举报

发表于 2005-4-2 11:02:55 | 显示全部楼层
楼上说的也没错,可能是我想多了。我经验性的以为,一个问题的描述中涉及其本身的时候往往引出很复杂的理论问题(比如“能否编一个程序判断任何一个程序开始运行后是否能正常停止”),所以才会想到那里去。但仔细想想这个问题好像拔不了那么高。

另,我以为楼上的楼上说我的程序做得牵强,其实我也觉得牵强,所以希望有个更好的答案。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表