我试图用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值而停止?我该怎么做才能避免它?
答案 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
。