复制到void *指针

时间:2012-05-18 17:59:42

标签: c copy void-pointers

我有一个功能getData(void* data) 应该将一些内部计算值复制到数据中 例如int r = getRadius(); r应该被复制到数据,并且是从函数getData返回的方式 这样做的正确方法是什么? 我试过*(int*)data = r; 但我不确定这是一个最好的解决方案。

2 个答案:

答案 0 :(得分:7)

如果您确定void指针引用的内存是int,那么您可以对

充满信心
*(int *)data = r;

然而,更好的通用解决方案是:

memcpy(data, &r, sizeof(int));

这样您就不必担心字节对齐或其他潜在的陷阱。

答案 1 :(得分:0)

我不认为使用您展示的API有一个很好的方法。 dbeer的解决方案当然有效,但API本身存在问题。

如果函数返回半径(整数),则输出参数应为int *
我想这不是那么简单。真实函数更像是getData(int what, void *data),其中what的值决定了数据的类型 这样的API并不好,因为它会阻止编译器(以及您在阅读代码时)正确检查类型。

但是如果您希望坚持使用此API,请至少添加一个尺寸参数,并在写入data之前对其进行验证。