一种用C语言实现的打印程序源码的方法
来源:互联网 发布:育碧彩虹六号数据查询 编辑:程序博客网 时间:2024/04/27 05:31
今天面试,被问到如何用C语言实现一个能打印自身源代码的程序,且程序不能访问之前的源代码的文件。说了一些思路,回来后发现思路有问题,只好在机器上尝试。以下是一个种可行的实现方法,源码如下:
#include <stdio.h>
#define LINE_MAX_NUM 1024
int main()
{
char buf[LINE_MAX_NUM] = {0};
FILE *file = fopen(__FILE__, "r");
if (file == NULL)
{
printf("file not found!\n");
return -1;
}
/*
other code goes here .....
....................................
....................................
*/
while(fgets(buf, LINE_MAX_NUM, file) != NULL)
{
printf("%s", buf);
}
fclose(file);
return 0;
}
运行结果如下:
liliang@server:/home/smp311$ ./a.out
#include <stdio.h>
#define LINE_MAX_NUM 1024
int main()
{
char buf[LINE_MAX_NUM] = {0};
FILE *file = fopen(__FILE__, "r");
if (file == NULL)
{
printf("file not found!\n");
return -1;
}
/*
other code goes here .....
....................................
....................................
*/
while(fgets(buf, LINE_MAX_NUM, file) != NULL)
{
printf("%s", buf);
}
fclose(file);
return 0;
}
开始以为这个就是问题的答案,后来发现如果在运行时,移动源代码所在文件的路径或者更改名称,程序都不能正常的输出:
liliang@server:/home/smp311$ ./a.out
file not found!
分析一下原因,原来在源代码中的__FILE__被替换为源代码在系统上所在的路径,当源代码文件所在的位置改变时,便无法找到。何为正解?看来要达到最初的目的,需要将源代码所在的文件包含在生成的可执行文件中才能从更本上解决问题。如何才能办到? 继续探索中....
- 一种用C语言实现的打印程序源码的方法
- 一种C语言打桩函数的源码实现
- C语言实现多态的一种方法
- python调用c语言函数的一种简单实现方法
- C语言实现的linux中打印程序
- c语言struct的一种初始化方法
- c语言 strtok strtok_r的一种实现
- 一种有限状态机的C语言实现
- 整理:一种有限状态机的C语言实现
- C 语言单例的一种实现
- 打印月历的程序(C语言)
- linux上使用strace查看C语言级别的php源码【一种方法】
- linux上使用strace查看C语言级别的php源码【一种方法】
- 用C语言写打印自己的程序
- 学C语言时的小程序之一:杨辉三角的一种方法
- C打印函数printf的一种实现原理简要分析
- 利用http组件来实现页面打印的一种方法
- C语言:链表的循环,两种思考方法,第一种用select_1()实现,第二种用select_2()实现.
- Java开发中的23种设计模式之十四:模板方法模式(Template Method)
- linux umount命令介绍与device is busy解决方法
- JSP开发时, 在页面中格式化和解析日期始终是个头疼的事情. 可以用JSTL和JavaScript搞定.
- xuggle 不支持 ffmepg preset (faster,slow等) 的解决办法
- Java开发中的23种设计模式之十五:观察者模式(Observer)
- 一种用C语言实现的打印程序源码的方法
- python调用shell命令
- android PopupWindow实现从底部弹出或滑出选择菜单或窗口
- C语言数组a[b]=b[a]。。。。
- socket中read、write、send、recv函数的比较
- vim配置
- C的小程序记录(更新131006)
- Java开发中的23种设计模式之十六:迭代器模式(Iterator)
- 树的子结构遍历