2014-10-11 1 views
0

파일 크기를 읽은 다음 그에 따라 버퍼 크기를 할당하는 코드를 작성하려고합니다.malloc()이 버퍼 크기를 할당하지 않습니다.

어떤 이유로 버퍼 크기가 4 바이트를 항상 변경하지 않습니다.

버퍼가 읽기 파일 크기와 동일한 메모리를 할당하지 못하는 이유는 무엇입니까?

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

int main() 
{ 
    FILE *file,*fp; 

    file = fopen("file.txt", "r"); 
    fp = fopen("outputnew.txt" , "w"); 

    long lSize; 

    fseek(file, 0, SEEK_END); 
    lSize = ftell(file); 
    fseek(file, 0, SEEK_SET); 

    char *buffer = (char*) malloc(sizeof(char)*lSize); 
    printf("%d\n",sizeof(buffer)); 
    return(0); 
} 
+2

힌트 # 1 : [malloc'을 캐스트하지 마십시오] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc); 힌트 # 2 : ['sizeof (char)'는 항상'1']] (http://stackoverflow.com/questions/2215445/are-there-machines-where-sizeofchar-1) – Crozin

답변

2

malloc이 작동하지만 버퍼 크기 테스트가 잘못되었습니다. sizeof(buffer)은 변수 buffer의 크기를 반환하며 char *입니다. 32 비트 플랫폼에서이 값은 항상 4 바이트입니다. 당신이 원하는 것은 buffer이 가리키는 힙 할당의 크기입니다; 그것을 돌려주는 쉬운 방법은 없습니다. 그러나 코드 블록의 크기를 할당한다는 점에서 정확합니다. sizeof(char)*lSize

1

버퍼가 괜찮습니다. C 컴파일러의 관점에서 bufferchar *이므로 sizeof(buffer)sizeof(char *)입니다. malloc이 유효한 (null이 아닌) 주소를 반환하는 한 괜찮습니다.

1

일반적으로 malloc()은 실패하지 않습니다. 또는 malloc()이 실패했는지 확인하려면 버퍼에 저장된 반환 주소를 확인하십시오.

if (buffer == NULL) printf ("malloc() failed \ n");

그리고 sizeof (buffer)는 포인터 변수 버퍼의 크기를 반환합니다. x86 플랫폼에서는 4 바이트이고 x64 플랫폼에서는 8 바이트입니다.

관련 문제