2013-01-02 3 views
0

fread가 Win7 x64에서 예기치 않게 작동합니다.Windows fread unexpected behavior

length = fread(buffer, 1, fileSize, file); 

FREAD 이는 파일 크기는과 같이 동일한 개수의 바이트를 리턴

file = fopen(path, "rb"); 
fseek(file, 0, SEEK_END); 
fileSize = ftell(file); 
fseek(file, 0, SEEK_SET); 
buffer = malloc(fileSize); 
length = fread(buffer, fileSize, 1, file); 

FREAD는 반면 판독되는 1 바이트로 리턴 (ferror 함수와 무엇이 일어 났는지를 결정하기 위해 feof 모두 0을 리턴). MSDN은 "fread 함수는 입력 스트림에서 size 바이트의 항목을 계산하여 버퍼에 저장합니다."라고 말합니다. 어느 코드가 동일한 양의 데이터를 읽어야한다는 것을 의미하는 것으로 해석합니다. 누구도 내가 기대하는대로 왜 fread가 작동하지 않는지 알고 있습니까?

답변

2

같은 양의 데이터를 읽습니다. 읽은 바이트 수는 size이고 시간은 count입니다. 반환되는 항목은 읽은 항목의 수입니다.

첫 번째 경우에 sizeSize 크기의 항목 1 개를 요청하고 1을 반환했습니다. 두 번째 경우에 크기 1의 fileSize 항목을 요청하고 fileSize를 반환했습니다.

+0

고맙습니다. – Matt

1

fread은 "읽은 전체 항목 수"가 아니라 읽은 바이트 수를 반환합니다. 당신이 크기 fileSize의 하나 개의 항목을 읽고 fread(buffer, fileSize, 1, file);

(그리고 fread 따라서 성공에 1을 반환합니다) 'fread(buffer, 1, fileSize, file); 당신이 크기 1의 fileSize 항목을 읽고 그것이 당신으로 (읽은 바이트 수를 반환하는 반면 기대하고있다).