gpt4 book ai didi

c - 如何从文件中读取const char *

转载 作者:行者123 更新时间:2023-11-30 16:51:47 31 4
gpt4 key购买 nike

我需要从文本文件中读取一个文件名。然后我必须将它用作 fopen 的参数。因此,我需要将其读取为 const char* ,因为这是 fopen 接受作为第一个参数的类型。我该怎么做呢?

我尝试过类似的方法:

 FILE *a;
a=fopen("a.txt","r");
const char *filename
fgets(filename,100,a);
image=fopen(filename,"rb");

出现问题,因为我执行此操作时收到段错误。我认为变量 filename 没有被 fopen 函数很好地接受。

最佳答案

您可能已经看到 fopen() 采用 (const char *) 类型的参数,但您需要能够在传递字符串之前修改字符串到函数。另外,您需要为字符串分配空间,并且您可能会考虑为超过 100 个 char 分配空间。 stdio.h 头文件包含宏 FILENAME_MAX,该宏扩展为数组的正确大小的整数常量,该数组将保存系统上最长的文件名字符串。例如,您可以使用char filename[FILENAME_MAX];。当调用 fopen() 时遇到标识符 filename 时,它会衰减为指向 char 的指针,该指针会转换为指向const char,根据函数原型(prototype)。

此外,fgets() 在 if 获取一行文本时保留换行符,因此您需要将其删除。您应该检查 fgets() 的结果,因为如果发生错误或者在文件末尾调用它,它会返回一个 NULL 指针;否则,它将返回指向 filename[] 中第一个 char 的指针。

FILE *a;
a=fopen("a.txt","r");
char filename[FILENAME_MAX];
char *ch;

ch = fgets(filename,FILENAME_MAX,a);

/* Remove trailing newline */
if (ch) {
while (*ch != '\0' && *ch != '\n') {
++ch;
}
if (*ch == '\n') { // replace '\n' with '\0'
*ch = '\0';
}
image=fopen(filename,"rb");
}

关于c - 如何从文件中读取const char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41589662/

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