2017-09-08 14 views
0

void* 걸리고, 일부 메모리를 복사 한 다음 포인터를 이동하는 함수를 만들려고합니다. 그것은 무효 포인터이기 때문에 , 나는 내가 char*에 캐스팅과 같이, 그 이동 거라고 생각 : 약 ((char*)dest)void * char로 캐스트 * lvalue가 아닌?

표현을 말하는

PVOID SendAndMoveHead(PVOID dest, const Message& message, const size_t& size) 
{ 
    PVOID ret = CopyMemory(dest, (PVOID)message.msg.c_str(), size); 
    ((char*)dest) += size; 
    return ret; 
} 

그러나 VS 불평 나에게 수정 좌변을해야합니다

나는 그것이라고 생각하는 다음 작품 가입일 :

PVOID SendAndMoveHead(PVOID dest, const Message& message, const size_t& size) 
{ 
    PVOID ret = CopyMemory(dest, (PVOID)message.msg.c_str(), size); 
    char* d = (char*)dest; 
    d += size; 
    return (PVOID)d; 
} 

누군가가 첫 번째 버전이 작동하지 않아야하는 이유에 대해 밝힐 수 있다면 정말 고맙겠습니다.

+0

할당의 왼쪽 피연산자를 형 변환 할 수 없습니다. – metamorphling

+0

[lvalue 캐스트가 왜 작동합니까?] (https://stackoverflow.com/questions/15343276/why-does-an-lvalue-cast-work) –

+0

아마도이 태그는 C++가 아니라 C 태그 여야합니다. – nwp

답변

2

((char*)dest)은 새로운 임시 char *을 제공합니다. ((char*)dest) += size;은 일시적으로 변경되며 아무런 영향을 미치지 않으므로 컴파일 오류가 발생합니다.

d은 일시적인 것이 아니며 반환 할 수있을만큼 길습니다.

또는 return (char*)dest + size;으로 작성할 수 있습니다.