2011-12-12 88 views
0

我已經瀏覽了手冊頁,並閱讀了一些示例。我所有的其他系統和標準調用似乎都圍繞着相同的數據,爲什麼不fread?fread()返回零字節閱讀:我不明白爲什麼

#include <stdlib.h> 
#include <stdio.h> 

unsigned char *data; 

int main(int argc, char *argv[]) 
{ 
    FILE *fp = fopen("test_out.raw", "rb"); 
    if (fp == NULL) { 
     fprintf(stderr, "ERROR: cannot open test_out.raw.\n"); 
     return -1; 
    } 

    long int size; 
    fseek(fp, 0L, SEEK_END); 
    size = ftell(fp); 
    if(size < 0) { 
     fprintf(stderr, "ERROR: cannot calculate size of file.\n"); 
     return -1; 
    } 

    data = (unsigned char *)calloc(sizeof(unsigned char), size); 
    if (data == NULL) { 
     fprintf(stderr, "ERROR: cannot create data.\n"); 
     return -1; 
    } 

    if (!fread(data, sizeof(unsigned char), size, fp)) { 
     fprintf(stderr, "ERROR: could not read data into buffer.\n"); 
     return -1; 
    } 

    int i; 
    for (i = 0 ; i < size; ++i) { 
     if (i && (i%10) == 0) putchar('\n'); 
     fprintf(stdout, " --%c-- ", (unsigned char)(data[i])); 
    } 

    free(data); 
    fclose(fp); 
    return 0; 
} 

回答

2

您移動到fseek的文件末尾,然後嘗試從中讀取 - 但由於您已經在文件末尾,讀取失敗,因爲沒有剩下可讀的內容。

之前試圖讀取,回到文件的開頭與其他fseek

fseek(fp, 0L, SEEK_SET); 

,或者更簡單地用一個rewind

rewind(fp); 
1

你打電話fseek找到文件的末尾,這個移動位置指示器到文件的末尾,所以當你調用FREAD有沒有數據左讀的。在嘗試從中讀取數據之前,您需要使用fseek返回到文件的開頭。

相關問題