您可能已经看到fopen()
需要(const char *)
类型的参数,但是您需要能够在将其传递给该函数之前修改该字符串。此外,您需要为您的字符串分配空间,并且您可能会考虑为超过100个空间分配空间。 stdio.h
头文件包含宏FILENAME_MAX
,它扩展为一个数组的正确大小的整数常量,该数组将保存系统上最长的文件名字符串。例如,您可以使用char filename[FILENAME_MAX];
。当在fopen()
的调用中遇到标识符filename
时,根据函数原型,它将衰变为指向char
的指针,该指针被转换为指向const char
的指针。
此外,fgets()
保留换行时,如果提取一行文本,所以你需要删除它。您应该检查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");
}
'const char * filename' - >'char filename [100];'。另外如果'filename'包含换行符,则需要将其删除。 – BLUEPIXY
我知道代码是错误的,我想知道正确的替代 –
@LazuRazvan我建议你阅读C中常量('const')的用法。有很多结果只是从谷歌搜索“在C中使用const” 。 –