2015-05-04 76 views
-4

下面的代碼是將文本文件複製到另一個文件中。 其失敗。 assertion error(stream!= NULL)程序在從文件讀取時崩潰。 C

fp = fopen("quiz.txt", "w"); 
fp2 = fopen("output.txt", "r"); 

number_of_conversions = fscanf(fp2, "%c", &c); 

while (number_of_conversions != 0 && number_of_conversions != EOF){ 
    fputc(c,fp); 
    number_of_conversions = fscanf(fp2, "%c", &c); 
} 
fclose(fp2); 
fclose(fp); 
+0

代碼部分被擰緊。 '\t fp = fopen(「quiz.txt」,「w」); \t fp2 = fopen(「output.txt」,「r」); \t number_of_conversions =的fscanf(FP2, 「%C」,&c); \t而(number_of_conversions = 0 && number_of_conversions = EOF){ \t \t的fputc(C,FP);! \t \t \t number_of_conversions =的fscanf (FP2, 「%C」,&c); \t} \t FCLOSE(FP2); \t FCLOSE(FP);' –

+0

我看到在沒有'assert'碼。看起來很奇怪,你正在從一個名爲'output.txt'的文件中讀取數據。 – user3386109

+0

我已經寫數據到它現在正在寫數據回輸入文件。 –

回答

0

在使用返回的文件指針前總是檢查fopen()的成功。

如果fopen()失敗,它將返回NULL,並使用它進一步將導致undefined behaviour。因此,在fopen()調用後立即進行NULL檢查。另外,FWIW,如果fopen()失敗,則不會打開FILE *,您也不需要撥打fclose()