打印具有相同名称的C文件的源代码的C程序



所以我需要编写一个带有以下编译标志的代码:

gcc-ansi-pedantic-Wall

全部基于Linux的操作系统。输出程序应该打印自己的源代码。如果我更改输出文件名,并且文件夹中有一个同名的C文件,它将打印其内容。

到目前为止,我设法做到了这一点:

#include <stdio.h>
int main()
{
char c; 
FILE *my_file = fopen(__FILE__, "r");
while (c != EOF)
{
c = fgetc(my_file);
putchar(c);
}
fclose(my_file);
return 0;
}

但是,如果我更改文件名和C文件名,就会出现错误。示例:对于文件:prnt.c,prnt

Consule -> os/23$ ./prnt
#include <stdio.h>
int main()
{
char c; 
FILE *my_file = fopen(__FILE__, "r");
while (c != EOF)
{
c = fgetc(my_file);
putchar(c);
}
fclose(my_file);
return 0;
}

对于相同的文件,在我将名称更改为test.c后,测试(不编译(

/os/23$ ./test 
Segmentation fault (core dumped)

之所以会发生这种情况,是因为__FILE__宏,编译后会更改为原始文件名。问题是我该如何解决这个问题?

所以我查看了Paul Hankin的建议,我设法解决了这个问题。希望将来它能帮助到别人。

我的解决方案:

#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
/*
This program prints the source code
of the 'C' file with the same name in the
same directory.
*/
char c = 'a'; /* Initialization before while loop.*/
char* locat = argv[0]; /* The path to the program file.*/
char suff[3] = ".c";
FILE* my_file;
strcat(locat, suff); /* Doesn't work for Windows.*/
my_file = fopen(locat, "r");
while (c != EOF)
{
c = fgetc(my_file);
putchar(c);
}
fclose(my_file);
return 0;
}

相关内容

  • 没有找到相关文章

最新更新