我正在尝试创建一个带void*
的函数,将一些内存复制到它,然后移动指针。
因为它是一个无效指针,我以为我会把它转换为char*
并移动它,就像这样:
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抱怨((char*)dest)
说
表达式必须是一个可修改的左值
我认为是这样,因为以下工作:
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 :(得分:2)
((char*)dest)
为您提供了一个新的临时char *
。 ((char*)dest) += size;
会改变临时值并且没有效果,这会导致编译失败。
在第二个例子中,d
不是一个临时的,并且足够长,可以返回。
或者你可以写return (char*)dest + size;
。