2011-12-12 2 views
0

맨 페이지를 살펴본 후 온라인에서 몇 가지 예를 읽었습니다. 내 모든 다른 시스템과 표준 호출은 같은 데이터를 중심으로 작동하는 것 같습니다. 왜 fread가 아닌가요? 당신은 파일의 끝을 찾을 수 fseek를 호출하고fread() Return By Zero Bytes 읽기 : 내가 이해하지 못하는 이유

#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으로 파일의 끝으로 이동 한 다음 읽으려고합니다. 이미 파일의 끝에 있기 때문에 읽는 데 아무 것도 없어 읽기가 실패합니다.

rewind(fp); 
하십시오 rewind로,

fseek(fp, 0L, SEEK_SET); 

또는, 더 간단 :

읽기를 시도하기 전에, 다른 fseek로 다시 파일의 시작 부분에 도착

1

,이 파일의 끝에 위치 표시기를 이동, 그래서 당신은 FREAD를 호출 할 때 데이터가 읽기 남아 있지있다. 파일에서 데이터를 읽으 려하기 전에 파일의 처음으로 돌아가려면 fseek을 사용해야합니다.

관련 문제