char sizeof 이상하게 출력되는데.. 뭐죠?

wonjnlee의 이미지

#include
#include
#include

void main()
{
char* c1;
c1 = (char*)calloc(10, sizeof(char));
printf("c1 size : %lu\n", sizeof(c1));
printf("c1 strlen : %lu\n", strlen(c1));
}

이렇게 하면

c1 size : 8
c1 strlen : 0

이렇게 나오네요.. 전 c1 size : 10 이 나올거라 생각했는데..
이유가 뭘까요?ㅠ

wonjnlee의 이미지

lu 말고 %d로 찍어도 같습니다.

wonjnlee의 이미지

lu 말고 %d로 찍어도 같습니다.

m4170의 이미지

아래 페이지를 읽어 보시면 이해하실 것 같습니다.

http://en.cppreference.com/w/cpp/language/sizeof

tyhan의 이미지

64비트 머신이군요!

twinwings의 이미지

2

 의 이미지

char* c1이기 때문이죠.
그래서 sizeof(c1) == sizeof(char *) /* == char * 포인터 크기 */가 되는 겁니다.

sizeof는 컴파일 타임에서 오직 대상의 타입만을 보고 크기를 알려줍니다.
런타임에 포인터가 스택을 가리키는지, 힙을 가리키는지, 가리키는 대상의 크기는 얼마인지는 전혀 모릅니다.
사실 C언어에서는 그런 정보를 어떤 방법으로도 전혀 제공하지 않으니 프로그래머가 따로 기록하는 수밖에 없어요.

char* c1;
size_t c1_size; /* stddef.h */
 
c1_size = 10; /* 내가 할당해줄 거니까 내가 알고있음 */
c1 = (char*)calloc(c1_size, sizeof(char));