不按预期读取整个文件

时间:2013-10-14 19:23:57

标签: c binaryfiles fread

我试图用C读取一个大的二进制文件。 我写了以下代码:

FILE* f1 =  fopen("filename.exe", "rb");
    if(f1 != NULL)
    {
        fseek(f1,0,SEEK_END);
        long l = ftell(f1);
        fseek(f1,0,SEEK_SET);
        char * buf = (char *)malloc(l* sizeof(char));
        int k = fread(buf,sizeof(buf),1,f1);
        if(k != l)
            printf("the file was not read properly");
    }

现在,k不仅不等于l,而且更小(l约为99,000,000而k仅为13)。

fread是否可能因文件中的NULL值而停止?我该怎么做才能避免它?

1 个答案:

答案 0 :(得分:2)

fread返回读取的项目数。在您的情况下,大小为l,数字为1。 fread将返回1.交换参数l和1.

如果您真的想在二进制文件中查找ascii字符串,可以执行以下操作:

char *find = ....
int len = strlen(find);
char *end = (buf + l) - len;
for(char *p = buf; p < end; p++) {
    if(strncmp(p, find, len) == 0) {
        // you have found ascii string in buf
    }
}

如果它不是ascii字符串,那么您正在寻找使用memcmp()而不是strncmp