fread 不会更改函数中的指针值(导致无限循环与 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)或者你会得到一个无限循环(除非文件小于结构的大小,这是另一个功能错误(

旁白:xp是不透明结构FILE指针。即使有多个fread也不会改变。哪些变化是一些隐藏的offset值。但是,除非您在句柄上调用ftell,否则您无法获取该信息。

最新更新