2013-10-14 24 views
1

我想讀C. 一個大的二進制文件我寫了下面的代碼:的fread不讀如預期整個文件

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

'sizeof(buf)'將等於4或8,具體取決於您是否擁有32位的64位系統。在'fread'中使用'l'。 – lurker

+0

沒有幫助。仍然是相同的結果 – one

+1

fread返回讀取的項目數。在你的情況下,大小是l,數字是1. fread將返回1.交換參數l和1. –

回答

1

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