2015-04-12 42 views
1

我不擅長C,但我從來沒有見過這樣的事情。分割錯誤,當我fread一個二進制文件

我有一個二進制文件,file.bin,其中有一個long整數後面跟着很多double實數。所以我寫了以下內容:發生在fread(&i,sizeof(long),1,fp);

#include <stdio.h> 

int main(void) { 
    char filename[1000]; 
    sprintf(filename, "~/file.bin"); 
    FILE *fp; 
    long i; 
    double x; 

    fp=fopen(filename,"rb"); 

    fread(&i,sizeof(long),1,fp); 

    printf("%ld\n",i); 

    for (i=0;i<20;i++){ 
     fread(&x,sizeof(double),1,fp); 
     printf("%le\n",x); 
    } 

    fclose(fp); 
    return 0; 
} 

分割違反我以這種方式以前寫過類似的代碼,他們都工作得很好,但這不是。

非常感謝您的回答。

僅供參考,我在linux服務器上使用gcc 3.4.6。

+1

'fp'包含什麼值? – immibis

+5

'fread'需要一個非空的文件指針。請檢查fopen的結果。 ('〜'語法被shell理解,但可能無法被標準庫識別,請嘗試完整的已解析路徑。) –

+0

@MOehm哦......就是這樣。謝謝。 –

回答

1

你確定該文件存在,並且fp不是NULL?

我試過你的代碼,如果文件存在,它也運行,如果文件不包含數據。

,我建議你在文件打開後插入控件:

fp=fopen(filename,"rb"); 
if (fp==NULL) { 
    perror("Error "); 
    return errno; 
} 

如果您使用的errno記住包含errno.h中!

#include <errno.h> 

這個補丁只能解決錯誤,由於計劃生育的NULL assignement,但應是更好的你,如果你看了以後結束(和其他情況)也認爲錯誤的FREAD()函數返回。參見fread規範:http://www.cplusplus.com/reference/cstdio/fread/