[英]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的大小,这是另一个功能错误)
另外: xp
是FILE
不透明结构上的指针。 即使多次fread
它也不会改变。 哪些更改是一些隐藏的offset
值。 但是,除非您在句柄上调用ftell
,否则您将无法获得该信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.