gpt4 book ai didi

打印同名 C 文件源代码的 C 程序

转载 作者:行者123 更新时间:2023-12-04 18:42:56 24 4
gpt4 key购买 nike

所以我需要用这个编译标志写一个代码:

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 __ 宏而发生的,它在编译后更改为原始文件名。问题是我该如何解决这个问题?

最佳答案

所以我检查了保罗汉金的建议,我设法解决了这个问题。
希望将来它会帮助某人。
我的解决方案:

#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\0";
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;
}

关于打印同名 C 文件源代码的 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67848405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com