我正在尝试读取一个名为"file.raw"的文件,每次读取4个字节到一个数组中,并检查它是否包含我要查找的特定的4个字节签名。但是我遇到了麻烦。使用fread时,得到的result值为0,而不是4。
#include<stdint.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef uint8_t BYTE;
int main(void)
{
size_t result;
FILE *inptr = fopen("file.raw","r+");
//Check if file can be opened.
if (inptr == NULL)
{
printf("File Open Error\n");
return -1;
}
long int x = 0;
while(!feof(inptr))
{
// Make space for reading in to an array
BYTE *array = (BYTE *) malloc(10);
if(array == NULL)
{
printf("Array Initialization Error\n");
return -1;
}
result = fread(array,1,4,inptr);
//Exit if file not read. ** This is where I can't get past.
if(result != 4)
{
printf("File Read Error\n");
printf("%d\n",result);
free(array);
fclose(inptr);
return -1;
}
//Compare strings
if(memcmp(array,"0xffd8ffe0",4)==0)
{
printf("File Start found\n");
printf("Exiting...\n");
printf("%p\n",inptr);
free(array);
fclose(inptr);
return 0;
}
x++;
free(array);
}
printf("%p\n",inptr);
printf("%ld\n",x);
fclose(inptr);
return 0;
}
ferror(inptr)
会给你什么结果? - M.Babcockfeof()
和ferror()
以确定原因:是 EOF 还是读取失败。如果是读取失败,请检查errno
获取失败原因。 - hmjdwhile(!feof(inptr))
是完全错误的。feof
仅在读取操作完成后才有意义... - Evan Teran