아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
팔팔한군함조253
팔팔한군함조25319.03.31

C 프로그래밍에서 동적할당된 변수의 크기를 구하는 방법?

char *c = NULL; char b[10]; c = (char*)malloc(sizeof(char)*100); printf("%d\n", sizeof(c)); printf("%d\n", sizeof(b));

위의 코드에서 c의 크기는 4로 나오고 b의 크기는 10으로 나옵니다.

c가 100이 나오길 기대하고 있었는데, 4로 나오는 걸 보면 아마 포인터의 크기를 리턴한 것 같은데,
b는 왜 10이 나올까요?

이 경우, 동적으로 할당된 변수(여기서는 c)의 크기(100 바이트)를 알아낼 방법은 없을까요??

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 변수 c를 포인터로 선언 했으니 포인터 사이즈인 4가 나오는 것이 정상입니다.

    C++라면 모를까 C라면 글쎄요.. 동적으로 할당받은 메모리에 값으로 정해서 넣지 않으면 알 수 없을 겁니다.

    만약 C++이라면, 원시배열이 아닌 vector같은 알아서 메모리 관리까지 해주는 '컨테이너'라고 불리는 것들이 존재합니다.

    이것들은 멤버함수 size()라는 것을 가지고 있고, 이것을 호출하면 현재 들어있는 요소의 갯수를 반환합니다.

    또한, 문자열도 char*가 아닌 string이라는 훨씬 쓰기 편한 고급 문자열을 제공하며, 이또한 size()로 길이를 알수 있습니다.


  • 동적할당한 경우는 그저 포인터일 뿐이므로(그게 배열인지 포인터인지 알길이 없죠) 포인터 자체의 크기만 반환해줍니다.

    동적할당된 배열의 크기를 알아야 하는 경우라면, 처음부터 그 크기가 저장된 값을 함께 넘겨주어야 합니다.

    그러므로 100이라는 사이즈를 변수로 같이 관리하는게 편할겁니다.

    다만 널로 종료되는 문자열의 경우는 널의 위치를 조사하거나 strlen함수로 (배열 전체가 아니라) 문자열의 길이를 알 수 있습니다.