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 .
감사합니다.
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 .
감사합니다.
아니요, 포인터로 변환하면 (배열을 인수로 함수에 전달할 때도 수행됨) 배열에 대한 모든 크기 정보가 손실됩니다.
이걸 할 방법이 하나 밖에없는 것 같습니다 ... – inherithandle
포인터 (이 같은 일을 할 때 배열이 붕괴되는 것)는 가리키고있는 데이터의 크기에 대해 "알지 못합니다". 별도로 추적해야합니다.
죄송합니다. 제 2 언어로서 영어를 사용하기 때문에 당신이하는 말을 이해할 수 없습니다. 당신의 글은 너무 우아합니다 ... – inherithandle
이것은 4 바이트 정렬 때문일 수 있습니다. 시도 확인하려면
A [8], A [10] 등
아니에요. 'sizeof'는 객체의 크기, 즉 배열이 피연산자 일 때 배열의 크기를 산출하는 것처럼 포인터의 크기를 산출하기 때문입니다. – cnicutar
예 u r rite ... – hazzelnuttie
코드의 일부 조각이 배열의 크기를 알아야 할 필요가있는 경우, 그것을 호출하는 코드가 가을 알려줍니다 확인 그것의 크기 정렬. 당신이 크기
int n = *(array - 1);
을 알고 싶을 때
int* array = malloc(sizeof(int) * (n + 1));
*array = n;
++array;
다음 :
해당 정보를 얻을 수 없다, 당신이 할 수있는 유일한 것은 당신이해야 할 일 경우 정보를 embeddd하는 것입니다 char 또는 필요한 모든 유형으로 동일한 작업을 수행 할 수 있습니다.
불가능합니다. 천만에요. – cnicutar
할당 할 때 어딘가에 저장하고 필요할 때 찾아 봅니다. –
또한 "% d"은 (는)'size_t '에 대한 올바른 형식 지정자가 아닙니다. – cnicutar