2012-07-18 47 views
1

我正在玩C中的文件I/O ..我試圖用fgets從一個文件中讀取數據並將其輸出到另一個文件。問題是它總是返回NULL,所以沒有任何東西被複制到輸出文件。這裏是我的代碼:C:fgets始終爲空

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE *fpIn; 
    FILE *fpOut; 

    if ((fpIn = fopen("C:\\testIn.txt", "r") == NULL)) 
    { 
     printf("Cannot open input file!\n"); 
     exit(1); 
    } 

    if ((fpOut = fopen("C:\\testOut.txt", "a") == NULL)) 
    { 
     printf("Cannot open output file!\n"); 
     exit(1); 
    } 

    char buffer[128]; 
    while (fgets(buffer, 128, fpIn) != NULL) 
    { 
     fputs(buffer, fpOut); 
    } 

    fclose(fpIn); 
    fclose(fpOut); 

    system("PAUSE"); 
    return 0; 
} 

另一件事;當我嘗試在第二個arg中使用「a + f」來打開時,它不起作用。

+0

您確定輸入文件存在並且您有權訪問它嗎? – 2012-07-18 01:58:53

+0

它肯定存在,我的帳戶當然可以訪問它,是的。有沒有可能限制IDE訪問它?我正在使用CodeBlocks,並且在我的計算機上擁有管理員權限。 – Matt 2012-07-18 02:01:22

+0

這段代碼是否編譯?它不應該。 – 2012-07-18 02:05:47

回答

8
if ((fpOut = fopen("C:\\testOut.txt", "a") == NULL)) 

應該

if ((fpOut = fopen("C:\\testOut.txt", "a")) == NULL) 

相同的輸入文件。 如果您是C的新手,我建議您一次只做一件事,以便更輕鬆地追蹤問題。 例如

fpOut = fopen("C:\\testOut.txt", "a"); 
if(fpOut == NULL) { 
    ... 
+0

LOL我不敢相信我沒有看到!做得好!謝謝..一旦StackOverflow讓我......(大約8分鐘),你將被標記爲「答案」。 – Matt 2012-07-18 02:04:26

+0

我建議使用具有最大警告選項的體面編譯器。 – 2012-07-18 02:08:17

+0

我使用CodeBlocks..far比使用DevC更好。我更喜歡VS2010,但它不支持C99。有另一個建議嗎? – Matt 2012-07-18 02:13:08