码:
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有这么多的大小,所以你只需要复制这么多的数据……
为了更安全,你应该计算目的地的大小,并根据你应该通过大小,这样可以避免非法访问读写.