一种用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__被替换为源代码在系统上所在的路径,当源代码文件所在的位置改变时,便无法找到。何为正解?看来要达到最初的目的,需要将源代码所在的文件包含在生成的可执行文件中才能从更本上解决问题。如何才能办到? 继续探索中....

 

 

 

 

 

 

 

 

原创粉丝点击