fgets()崩溃我的程序

时间:2011-12-04 15:33:52

标签: c fgets

我是C编程的新手。我正在尝试打开一个文件(juanjo2.klb),它是我用同一​​个程序创建的二进制文件,我将在这里展示。问题是我正在尝试使用fprintf()函数将字符串打印到文件中,然后使用fgets()将字符串写入'cad'字符串,并使用函数printf()打印到屏幕上我从文件中读取的字符串。

当我运行程序时,程序崩溃,Windows(Windows 7)给我一个消息框,说我的程序停止工作,它正在找到问题的解决方案。所以我真的不知道我做错了什么因为我认为我正在使用这些功能。我需要你的帮助。这是源代码:

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

#define MAXCHARS 20

int main()
{
    char cad[MAXCHARS];
    FILE *pf;
    char *nombre = "\\juanjo2.klb";
    if(pf = fopen(nombre, "a+b") == NULL)
    {
       printf("Error opening file\n");
       exit(-1);
    }

    fprintf(pf, "%s", "Hola como estas");

    while(feof(pf) == 0)
    {
        fgets(cad, 13, pf);
        printf("%s", cad);//Here I print the string to the screen.
    }

    fclose(pf); //Closing file.

    system("PAUSE");
    return 0;

}

我正在使用Codeblocks IDE 10.05。谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

if((pf = fopen(nombre, "a+b")) == NULL)

这是经典之作。

答案 1 :(得分:0)

...

int main()
{
    .
    .
    .

    if(pf = fopen(nombre, "a+b") == NULL)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

正如@worldplasser的答案(+1)所指出的,你的第一个问题就在上面一行。


这应该是:

    if((pf = fopen(nombre, "a+b")) == NULL)
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

将FILE *分配给pf,然后检查它是否为NULL


你原来的方式,即

   if(pf = fopen(nombre, "a+b") == NULL) /* wrong */

你将pf设置为`fopen(nombre,“a + b”)== NULL的结果,如果布尔语句(==)为FALSE则为0或者为0(通常为1)是真的。所以pf有boolean的结果而不是实际的文件指针。这也会引起问题,因为它现在正在考虑pf。

  pf = fopen(nomber, "a+b") == NULL; /* here to clarify == happens before = */

  if ( pf ) /* i.e. pf != 0 */