Ftell停止返回?

时间:2014-04-04 21:08:37

标签: c file ftell

在向后阅读我的文件并确保我不在顶部时,在调试器中我意识到ftell停止返回一个位置可以让任何人摆脱一些亮点吗?

int Dtl(Acc *user)
{
    FILE *dtl_Fp;
    trans_Pass dislog[10];
    int i=0,x=-1,r_Val;

    My_Convertor();
    dtl_Fp=Opnfile("Tempfile",r_B,dnt_ret_fp);

    system("cls");
    printf("Types Format\nW-Withdraw\tDep-Deposit\tSch-Pay School Fee\n\nID:NO\tTyp:Amount\t\tDate\n");
    while (1)
    {
        fseek(dtl_Fp,sizeof(trans_Pass)*(x),SEEK_END);
        fread(&dislog[i],sizeof(trans_Pass),1,dtl_Fp);
        r_Val=ftell(dtl_Fp);
         if ((ftell(dtl_Fp)==0)){break;}
         if(dislog[i].id_No==user->id_No){printf("%s\n\n",dislog[i].info);}
        i++;x--;
    }
    fclose(dtl_Fp);
}

1 个答案:

答案 0 :(得分:0)

可能与某些事情有关:

r_Val=ftell(dtl_Fp);
 if ((ftell(dtl_Fp)==0)){break;} 

您正在调用ftell()两次,但从不使用r_val。

代码段中没有任何内容允许我查看sizeof(trans_Pass)*(x)的值,即fseek()中的参数,但如果它不是合法值(0,文件大小),则可能导致意外结果

无法保证ftell()没有返回-1。你没有检查。出现错误时,ftell返回-1,然后将errno设置为非零值,该值可用于获取有关错误性质的信息。