【发布时间】:2019-03-29 06:13:29
【问题描述】:
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 并且循环重新开始
我已经测试过在这个函数的外部使用这部分代码并且它可以工作,所以问题是这样的。
我真的不知道怎么解决,有什么解决办法吗?
【问题讨论】:
-
尝试并拥有完整的示例。这里
appoggio从未定义,所以它的类型未知。您还需要检查每个操作的错误,而不仅仅是其中的一些。 -
fread有一个您必须检查的返回值。如果它不等于您传递的nmemb,那么您必须检查errno或ferror以确定是否发生错误。跨度>
标签: c windows codeblocks infinite-loop fread