繁体   English   中英

fread不会更改函数中的指针值(使用feof导致无限循环)-C

[英]fread doesn't change the pointer value in a function ( Cause infinite Loop with a feof ) - C

int ricerca_copia(int x,int xf)
{

FILE *xp;
int conf;
int f;
int xeof;

f=0;
// file was already written and closed before this function
xp=fopen("prenotazioni_copy.dat","rb");
if(xp)
{
  xeof=0;

  while(xeof==0)
  {
    //Never changes xp value
    fread(&appoggio,sizeof(appoggio),1,xp);
    if(feof(xp))
    {
     //never enters here

        xeof=1;
    }
    else
    {
            //other stuff
    }
    fclose(xp);

  }
}
printf("\nValore %d",f);
return f;
}

fread不会更改指针(xp)的值,因此xeof的值保持为0,并且循环重新启动

我已经测试过在此函数的外部使用这部分代码,并且它可以工作,所以问题就出在这里。

我真的不知道怎么解决,所以有什么解决办法吗?

问题是您在循环中调用了fclose(xp)

第一次迭代是否可以正常工作,但是下一次fread调用失败(您应该检查fread返回BTW,它应该返回读取的元素数,所以如果不返回,则返回0或-1会有问题),所以也可以feof在该句柄上(嗯,实际上这是未定义的行为,如此处所述: feof()在关闭文件上的返回值是多少?

您的意思是在循环调用fclose(xp)或得到无限循环(除非文件小于struct的大小,这是另一个功能错误)

另外: xpFILE不透明结构上的指针。 即使多次fread它也不会改变。 哪些更改是一些隐藏的offset值。 但是,除非您在句柄上调用ftell ,否则您将无法获得该信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM