void* 强制转换为 char* 而不是左值?
void* cast to char* not lvalue?
我正在尝试制作一个接受 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)
说
expression must me a modifiable lvalue
我以为是,因为以下作品:
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;
}
如果有人能阐明为什么第一个版本不能工作,我将不胜感激。
((char*)dest)
给你一个新的临时 char *
。 ((char*)dest) += size;
会更改临时文件并且没有效果,这会导致编译失败。
在第二个示例中,d
不是临时的,存在时间足够长,可以返回。
或者你可以写 return (char*)dest + size;
.
我正在尝试制作一个接受 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)
说
expression must me a modifiable lvalue
我以为是,因为以下作品:
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;
}
如果有人能阐明为什么第一个版本不能工作,我将不胜感激。
((char*)dest)
给你一个新的临时 char *
。 ((char*)dest) += size;
会更改临时文件并且没有效果,这会导致编译失败。
在第二个示例中,d
不是临时的,存在时间足够长,可以返回。
或者你可以写 return (char*)dest + size;
.