2012-07-18 135 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