【问题标题】:How to get copy of void pointer data如何获取空指针数据的副本
【发布时间】:2016-02-16 17:22:29
【问题描述】:

我尝试自己实现链表。因此,当我向其中添加新数据时,我会使用 node->data = data where data is (void*) type 之类的东西。所以我想通过意外编辑添加的变量来防止数据损坏。

例如:

int data = 10;
LinkedList_add(list, (void*)&data);
...
/* It will modify value in list */
data = new value; 

我该怎么做? 我试着用这种方式复制它:

 void* data_copy;
 *data_copy = *_data;

但我觉得它行不通,它也没有。

【问题讨论】:

  • 你确定你做C吗? new 运算符是 C++。

标签: c pointers copy void void-pointers


【解决方案1】:

执行此操作的一种简单方法是要求调用者指定他提供给您的数据的长度。将 LinkedList_add 函数的签名更改为:

void LinkedList_add(List*, size_t, const void*);

然后做这样的事情,其中​​size 是你从调用者那里得到的大小。

void *copy = malloc(size);
if (copy == NULL) {
    /* error handling here */
}

memcpy(copy, data, size);

在现实世界中,我不会费心去做这样的事情。相反,我会要求调用者复制我放入链接列表的数据。如果调用者不想让他的数据被意外覆盖,他必须自己制作一个副本。如果他希望能够覆盖数据(这是一个常见的用例),或者如果他不关心数据是否被意外覆盖,他可能不想复制数据。不要试图对程序员进行指导,这在 C 语言中很少有回报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多