繁体   English   中英

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)

表达式必须是可修改的左值

我认为是这样,因为以下工作:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM