memcpy指向union的void指针

前端之家收集整理的这篇文章主要介绍了memcpy指向union的void指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
码:
union foo
{
    char c;
    int i;
};

void func(void * src)
{
    union foo dest;
    memcpy(&dest,src,sizeof(union foo));   //here
}

如果我这样调用func():

int main()
{
    char c;
    int i;
    func(&c);
    func(&i);
    return 0;
}

调用函数(& c)中,c的大小小于sizeof(union foo),这可能很危险,对吧?

memcpy的行是否正确?如果没有,如何解决

我想要的是对memcpy的安全调用,它将void *指针复制到union.

一点背景:这是从一个非常复杂的函数提取的,包含void *参数的func()的签名是我无法控制的.当然,该示例没有任何用处,因为我删除了所有与提供最少代码示例无关的代码.

解决方法

Is the line with memcpy correct? And if not,how to fix it?

你应该传递void指针指向的内存大小,这样你就可以知道src有这么多的大小,所以你只需要复制这么多的数据……

为了更安全,你应该计算目的地的大小,并根据你应该通过大小,这样可以避免非法访问读写.

猜你在找的C&C++相关文章