2013-03-18 2 views
0

char 포인터 변수가 가리키는 배열 크기를 알아야합니다.char 포인터 변수가 가리키는 char-array-size를 알 수 있습니까?

하지만 sizeof 작동이 작동하지 않습니다.

char a[5]; 
char *b= a; 
int c = sizeof(b); 
printf("%d", sizeof(b)); // 8(64 bit cpu) printed, not 5 . 

감사합니다.

+3

불가능합니다. 천만에요. – cnicutar

+0

할당 할 때 어딘가에 저장하고 필요할 때 찾아 봅니다. –

+0

또한 "% d"은 (는)'size_t '에 대한 올바른 형식 지정자가 아닙니다. – cnicutar

답변

0

아니요, 포인터로 변환하면 (배열을 인수로 함수에 전달할 때도 수행됨) 배열에 대한 모든 크기 정보가 손실됩니다.

+0

이걸 할 방법이 하나 밖에없는 것 같습니다 ... – inherithandle

0

포인터 (이 같은 일을 할 때 배열이 붕괴되는 것)는 가리키고있는 데이터의 크기에 대해 "알지 못합니다". 별도로 추적해야합니다.

+0

죄송합니다. 제 2 언어로서 영어를 사용하기 때문에 당신이하는 말을 이해할 수 없습니다. 당신의 글은 너무 우아합니다 ... – inherithandle

-1

이것은 4 바이트 정렬 때문일 수 있습니다. 시도 확인하려면

A [8], A [10] 등

+2

아니에요. 'sizeof'는 객체의 크기, 즉 배열이 피연산자 일 때 배열의 크기를 산출하는 것처럼 포인터의 크기를 산출하기 때문입니다. – cnicutar

+0

예 u r rite ... – hazzelnuttie

1

코드의 일부 조각이 배열의 크기를 알아야 할 필요가있는 경우, 그것을 호출하는 코드가 을 알려줍니다 확인 그것의 크기 정렬. 당신이 크기

int n = *(array - 1); 

을 알고 싶을 때

int* array = malloc(sizeof(int) * (n + 1)); 
*array = n; 
++array; 

다음 :

0

해당 정보를 얻을 수 없다, 당신이 할 수있는 유일한 것은 당신이해야 할 일 경우 정보를 embeddd하는 것입니다 char 또는 필요한 모든 유형으로 동일한 작업을 수행 할 수 있습니다.

관련 문제