C 如何从文件中读取常量字符*
我需要从文本文件中C 如何从文件中读取常量字符*,c,file,C,File,我需要从文本文件中读取文件名。 然后我必须使用它作为fopen的参数。 因此,我需要将其作为const char*读取,因为这是fopen接受作为第一个参数的类型。我该怎么做 我试过这样的方法: FILE *a; a=fopen("a.txt","r"); const char *filename fgets(filename,100,a); image=fopen(filename,"rb"); 当我这样做时,我收到了一个分段错误,这可能是错误的。我认为变量filename没有被f
读取文件名。
然后我必须使用它作为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以上的代码分配空间。stdio.h
头文件包含宏FILENAME_MAX
,该宏扩展为一个数组的正确大小的整数常量,该数组将容纳系统上可能最长的文件名字符串。例如,您可以使用charfilename[filename_MAX]代码>。当调用fopen()
时遇到标识符filename
,它将衰减为指向char
的指针,并根据函数原型将其转换为指向const char
的指针
此外,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");
}
首先,您的seg故障可能来自尝试使用您不拥有的内存。i、 e.通过创建变量:
const char *filename;
并且在尝试使用它之前不给它任何内存()
关于您的声明:
因此,我需要将其作为const char*读取
不一定。
fopen
原型的第一个参数:简单地保证在该位置传递的参数将在fopen
函数中被视为const char*
。
可以使用简单的char*
传递参数,例如以下任一形式:
char *filename = {"somefilename.txt"};
或
并且,如注释和其他答案中所述,在作为参数传递之前,删除换行符,\n
。const char*filename
-->char filename[100]代码>。另外,如果filename
包含换行符,则有必要将其删除。我知道代码是错误的,我想知道正确的代码alternative@LazuRazvan我建议你仔细阅读C中常量(const
)的用法。通过谷歌搜索“在C中使用const”可以得到很多结果。fopen
需要一个字符指针作为参数;形式参数列表中的const
仅表示指向的内存内容不会被fopen()
更改。关键不是传递fopen
aconst char*
,而是传递一个指向字符串的指针。因此,您的问题是如何从文件中读取字符串;试着用谷歌搜索一下,你会得到某种char
array/pointer。
char filename[80];
strcpy(filename, "somefilename.txt");