c - 如何获取空指针数据的副本

标签 c pointers copy void void-pointers

我尝试自己实现链表。因此,当我向其中添加新数据时,我会使用类似 node->data = data 的内容。哪里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;

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

最佳答案

一个简单的方法是要求调用者指定他给你的数据有多长。更改您的签名 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 中很少得到返回。

关于c - 如何获取空指针数据的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721361/

相关文章:

c++ - Vim 找不到 C++ libavformat/libavutil 库(没有那个文件或目录)

c - 组装,画图

c - 流音频 udp C

c++ - 删除指针问题

java - 使用java中的线程进行文件的多个副本

c - 当我使用 char 数组作为文件名时,fopen 总是返回 NULL,但如果我使用像 "file.txt"这样的名称,一切正常

c# - C#读取指针地址值

c 字符数组和指针

perl - 如何在 Perl 中复制文件并维护其时间戳?

image - 将内容从主机操作系统复制到 Docker 镜像中,而无需重建镜像