【发布时间】:2013-08-16 00:28:43
【问题描述】:
我正在编写一个打印出 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 的字符通常在以前没有任何问题的情况下被删除(即0x1a、0x13)。
检查来自ferror() 的结果没有帮助(因为不存在错误)。
我不知道如何在调试过程中继续进行,有人可以引导我走向正确的方向吗?
【问题讨论】:
-
@JoachimPileborg 不,可能不会。在这种情况下, fgetc 不会返回 -1。 (尽管如果将 fgetc 的返回值分配给 char 而不是 int,您可以获得它的外观)
-
使用
feof读取二进制文件。我修改了我的代码,因为我没有你的文件,希望你可以试试我的代码。并给我一个结果。 -
一般提示,不要读取二进制文件,因为它是文本文件。结果将是不确定的。
-
谢谢,是的,我用 fread() 代替,最后它更适合这个问题