[C] 선언만 되고 할당되지는 않은 배열의 크기를 구하는 문제
글쓴이: strongspirit / 작성시간: 화, 2005/05/31 - 12:59오전
안녕하세요.
#include <stdio.h> #include <stdlib.h> #include <string.h> void dum(char *buf); int main(void) { char a[7]; int size1=0; size1=sizeof(a)/sizeof(a[0]); printf("size1 : %d\n", size1); dum(a); return 0; } void dum(char *buf) { int size2=0; size2=sizeof(buf)/sizeof(buf[0]); printf("size2 : %d\n", size2); }
위에서 보면 size1에서는 크기가 제대로 구해지는걸
볼 수 있는데 dum으로 넘어가면 크기가 안구해지네요.
아무래도 dum으로 넘어갈때 sizeof(buf)하게 되면
pointer의 값을 구하기 때문에 4/1이 되서 그런 결과가
나오지 않나 싶습니다.
그런데 size1에서도 a만으로 sizeof(a)를 했는데요,
char a[1]의 a나 char *a나 같은거 아닌가요?
왜 다르게 나오는지 잘 모르겠습니다.
그리고 dum()에서 인자로 들어온 char *buf의
크기를 구하려면 어떤 방법이 있을까요?
여러가지 해봤는데 쉽지가 않습니다.
초기화가 되지 않아서 '\0' 체크도 어렵구요.
도움 부탁드립니다.
Forums:
[code:1] char a[7];
여기서는 a 는 char 7개를 담을 수 있는 배열입니다.
따라서 sizeof(a) 를 하면 sizeof(char) * 7 의 값이 나옵니다.
반면에 dum 함수에 a 를 넘길 때 char * 로 넘기므로
dum 함수안에서 sizeof(a) 는 sizeof(char*) 가 됩니다.
(한번 char [7] 이런식으로 크기를 지정한 배열로 넘겨보세요.
될지 안될지는 모르겠습니다.)
dum 함수 내에서 a 가 가리키는 곳 이후에 데이터가 몇개가
있는지 알아낼 방법은 없습니다.
(문자열 처럼 끝에 \0 을 넣는다 는 식의 가정이 있으면 그걸 검사해서
알 수도 있겠지만 그런게 아니라면 불가능합니다.)
마지막으로 char[] 와 char * 는 엄밀히 따지면 서로 다른 것이라고 합니다. 저도 정확히는 잘 모릅니다.........
C언어에서 배열은 몇몇 경우를 제외하고는 포인터로 변환됩니다.함수
C언어에서 배열은 몇몇 경우를 제외하고는 포인터로 변환됩니다.
함수의 인자로 배열이 쓰이는 경우가 대표적인 경우라 할 수 있습니다.
함수의 인자로 배열이 전달되는 경우는 포인터로 변환되기 때문에 그 크기를 알 수 없게 됩니다. 함수로 인자를 전달할 때 그 크기도 같이 보내는 것이 일반적인 방법입니다.
댓글 달기