2017-12-21 1 views
0

파라미터 크기 바이트는 길다 ". 나는 마지막 바이트 수는 size * nmemb이되어야한다고 생각하지만 몇 가지 이유만으로 두 번째 구문 (크기 = 1)은 나를 위해 일하고있다.FREAD는()의 차이 란 2 및 3

+2

_ 작업이 아닌 _을 정의하십시오. 그것은 컴파일합니까? 두 버전 모두 작동해야합니다. [MCVE]를 게시 할 수 있습니까? –

+1

코드에서'buf'는 무엇입니까? –

+0

@MichaelWalz 반환 값은 항상 0이었습니다. 아래 답변의 이유를 이해했습니다. – i486

답변

4

차이점은 다음 두 가지이다 :

  1. 리턴 값이 실제로 읽은 요소 수 (nmemb까지 제로)이다. 성공하면 두 진술 문에 따라 다릅니다. 첫 번째 경우에
  2. :

    fread(buf, sizeof(buf), 1, file) 
    

    당신은 모두 또는 아무것도를 얻을 것이다; fread은 파일이 작은 경우 sizeof(buf)보다 작은 것을 읽을 수 없습니다. 두 번째 경우

    는 :

    fread(buf, 1, sizeof(buf), file); 
    

    당신은보다 sizeof(buf) 파일에서 사용 가능한 경우에도 fread는 가능한 한 많은 바이트를 읽을 수 있습니다. 실제로 읽은 요소의 수 (이 경우 바이트)가 리턴됩니다.

0

두 번째 매개 변수는 읽을 요소의 크기를 지정합니다. 세 번째 매개 변수는 읽으려는 요소의 수를 지정합니다.

그래서 첫 번째 경우에 당신은 크기 = 를 sizeof (BUF)1 요소를 읽고 싶어. 두 번째 경우

당신 를 sizeof (BUF)의 각 요소는 1 바이트 소자 번호를 판독 할. 두 번째 파일은이 How to set/get unsigned char * to and from std::shared_ptr<uint8_t>? 질문과 같이 전체 파일의 내용을 읽는 데 사용할 수 있습니다.