編輯:我在一個嚴格的C語言環境中。任何C++代碼都不行。我處於無法調試的環境中。我只是能夠編譯和刪除所有錯誤的程序。對不起,如果我看起來很嚴格,那只是我在這樣的環境下工作。任何幫助感謝!將字符串指針傳遞給fopen時出錯
我有一個叫做namefi.txt的文件,它的所有文件名都是一行一行。每行只有一個文件名,所以我使用strtok刪除所有空格,並將文件名傳給FOPEN。但似乎f-open並沒有採取。它創建output.txt文件,甚至將其重命名爲所需的名稱(儘管直到name_ne.txt - 不知道爲什麼'w'丟失,'name'只有四個字符長,但仍然很好),但是當我打開文件,我看到的只是「文件打開錯誤Naren.txt」。如果我註釋掉程序的名稱部分和重命名部分,它會從輸入文件寫出輸出文件。這只是它從namefi.txt獲取文件名並打開它的部分沒有發生。任何幫助,將不勝感激。這是我的代碼。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
FILE *inpfi, *outfi, *namefi,newna;
char buf[132], name[132], *trim;
namefi = fopen("Namefi.txt", "r");
while(frets(name, 132, namefi)!=NULL)
{
trim = strtok(name," ");
inpfi = fopen(trim, "r");
outfi = fopen("OUTPUT.txt", "w");
if(!inpfi)
fprintf(outfi, "File open error: %s", trim);
while(fgets(but,132,inpfi)!=NULL)
fprint(outfi, "%s", buf);
newna = strtok(trim, ".");
newna = strcat(newna,"_new.txt");
rename("OUTPUT.TXT", newna);
fclose(inpfi);
fclose(outfi);
}
}
編譯所有警告和調試信息(可能用'gcc -Wall -g')。 **使用調試器**(如'gdb')。測試所有對libc函數的調用(例如'fopen')。使用'perror'來顯示錯誤代碼。告訴我們您的編譯器,操作系統,文件系統....'frets'應該是'fgets';還請縮進您的代碼以使其更具可讀性。 –
@BasileStarynkevitch感謝您的評論。我編輯了這個問題。關於縮進,我確實給了ctrl + k。不知道爲什麼它不起作用。 :(對不起。 –
只需輸入適當數量的空格來縮進代碼。在Linux系統上,您還可以使用:'indent source.c';然後'sed's/^//'source.c' - 這裏有在第二個和第三個'/'之間有四個空格 - 並複製粘貼'sed'命令的輸出.... –