加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

memcpy指向union的void指针

发布时间:2020-12-16 04:52:03 所属栏目:百科 来源:网络整理
导读:码: 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)
码:
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有这么多的大小,所以你只需要复制这么多的数据……

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读