Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EOF提前发送时使用;fgetc“;_C_Stream_Eof_Fgetc - Fatal编程技术网

EOF提前发送时使用;fgetc“;

EOF提前发送时使用;fgetc“;,c,stream,eof,fgetc,C,Stream,Eof,Fgetc,我正在编写一个程序来打印Firefoxcookies.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(co

我正在编写一个程序来打印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,没有任何问题(即
0x1a
0x13

ferror()
检查结果没有帮助(因为不存在错误)


我不知道如何继续调试过程,有人能引导我正确的方向吗?

在不知道您是如何打开文件的情况下,我们不能确定,但SQLite数据库文件不是文本文件。如果在Windows计算机上以文本模式打开SQLite数据库文件,则每次尝试在包含值
26
0x1A
,Ctrl-Z)的位置读取时,都会收到EOF(没有理由假设这些位置将保持静止)。有许多免费(和商业)的工具用于处理SQLite数据库文件,尤其是FireFox本身。如果您仍然想使用C语言,我建议您访问,下载代码,并阅读介绍和文档。

@JoachimPileborg否,可能不会。在这种情况下,fgetc不会返回-1。(虽然如果将fgetc的返回值指定给char而不是int,则可以得到它的外观)使用
feof
读取二进制文件。我已经修改了我的代码,因为我没有您的文件,希望您可以尝试我的代码。给我一个结果。作为一般提示,不要像读取文本文件那样读取二进制文件。结果将是未定义的。谢谢,是的,我使用了fread(),但最终它更适合这个问题。谢谢,是的,我放弃了这种方法,因为它非常低效。相反,我使用了fread,这是一个更好的解决方案。