2012-11-05 2 views
0
void * ptr0 = (void*)"Buffer_1"; 
int size0 = sizeof(ptr0); 
// WILL THIS RETURN THE NUMBER OF BYTES OCCUPIED BY THE MEMORY POINTED BY ptr0? 

내 요구 사항은 * 내가 1 라인에서 일을하고 그것에 대한 포인터를 빈 공간을 만들 버퍼 &에서 일부 데이터를 저장)
1입니다.
2) 나중에이 버퍼의 크기를 BYTES에서 가져 오려고합니다. 두 번째 줄이이 일을 할 것입니다.C++에서 버퍼 (문자열 "")를 가리키는 void 포인터에 sizeof()를 사용하여 BYTES의 크기를 얻으시겠습니까?

+0

동적으로 생성 된 배열에없는이

char szArray[10]; 

같이 선언 된 배열에서 작동 배열의 크기를 얻을 수 있지만, 말 그대로 불가능합니다 . 예를 들어'ptr0'가 시작 내용이 같은 두 개의 별개의 객체 (단일 정수 또는 두 정수의 배열)를 가리키는 경우를 생각해보십시오. 'sizeof'는 당신이 원하는 크기의 객체를 어떻게 알 수 있습니까? –

+0

std :: string 또는 std :: vector 을 사용하면 어려운 일을하려고합니다. – john

답변

6

sizeof 유형에 필요한 크기를 반환합니다. 이 경우 sizeof에 전달한 타입이 포인터이기 때문에 포인터의 크기를 반환합니다.

포인터로 가리키는 데이터의 크기가 필요하면 명시 적으로 저장하여이를 기억해야합니다.

+0

포인터의 대신에 문자열의 크기를 볼 필요가 있다면 그것을 추가 할 것입니다. 즉 char arr [] = "string"; sizeof (arr)은 문자열 길이를 반환합니다. – fayyazkl

+1

@fayyazkl : 차라리 다음과 같이 추가합니다. [char a \ [\] = "string"의 차이점은 무엇입니까? 및 char * p = "string";] (http://stackoverflow.com/questions/9460260/what-is-the-difference-between-char-a-string-and-char-p-string/9631091#9631091) –

1

sizeof()는 컴파일 할 때 작동합니다. 따라서 sizeof(ptr0)은 일반적으로 4 또는 8 바이트를 반환합니다. 대신 strlen을 사용 하시겠습니까? 실제로 no를 저장한다. (void *)이 보유한 바이트 수를 별도의 변수에 저장하십시오.

2

아니요. 단순히 포인터의 크기를 바이트 단위로 반환합니다. sizeof를 사용하면 당신이 요구하는 것은뿐만 아니라 일어나는 것이 아니다

char* pArray = new char[10]; 

sizeof(szArray); // number of elements * sizeof(char) = 10 
sizeof(pArray); // sizeof the pointer