EOF是使用“fgetc”过早发送的

时间:2013-08-14 07:01:57

标签: c stream eof fgetc

我正在编写一个打印出Firefox cookies.sqlite文件的程序。

int printfile(FILE* cookiesfile)
{
    int c;
    //fseek(cookiesfile,0x18260,SEEK_SET);
    do{
        c=fgetc(cookiesfile);
        printf("%c",c);
    }while(c != EOF);
    printf("\n\n%x",c);
    if (ferror(cookiesfile) != 0)printf("\nchareror!\n");
    return 0;
}

代码在文件结束前的各个点返回EOF。在十六进制编辑器或记事本中打开文件表明文件更大。 EOF始终出现在同一点上。跳过这些点,数据将被读取,直到下一个EOF。发现EOF的字符通常是fgot之前没有任何问题(例如0x1a0x13)。

检查ferror()的结果没有帮助(因为没有错误)。

我不确定如何继续我的调试过程,有人能引导我朝着正确的方向前进吗?

1 个答案:

答案 0 :(得分:2)

在不知道如何打开文件的情况下,我们不能肯定地说,但SQLite数据库文件不是文本文件。如果您在Windows计算机上以文本模式打开SQLite数据库文件,则每次尝试读取包含值260x1A,<的位置时,您将收到EOF kbd> Ctrl-Z )(并且没有理由假设这些位置将保持静止)。有许多用于处理SQLite数据库文件的免费(和商业)工具,其中至少是FireFox本身的SQLite Manager plugin。如果您仍想在C中执行此操作,我建议您转到the SQLite website,下载代码,并阅读介绍和文档。