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함수로 (배열 전체가 아니라) 문자열의 길이를 알 수 있습니다.