您可能已經看到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」 。 –