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()的签名是我无法控制的.当然,该示例没有任何用处,因为我删除了所有与提供最少代码示例无关的代码. 解决方法
你应该传递void指针指向的内存大小,这样你就可以知道src有这么多的大小,所以你只需要复制这么多的数据…… 为了更安全,你应该计算目的地的大小,并根据你应该通过大小,这样可以避免非法访问读写. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |