首页 > 解决方案 > 如何在不知道数据类型的情况下写入 void 指针?

问题描述

我正在尝试使用 C 中的单链表编写通用堆栈的代码。我试图(void *)在其每个函数中用作数据类型,例如:

node* getNode(void *, size_t);

void append(node **, size_t);等等

每个节点的结构是:

typedef struct linked_list{
void *data;
struct linked_list *next; }node;

getNode上面提到的功能中,我正在尝试这样做:

node* getNode(void *data, size_t data_size) {
   node *newNode;
   newNode = (node *)malloc(sizeof(node));
   newNode->next = NULL;
  // this line should assign the void *data to the data part of the node
   return newNode;}

在不知道数据类型的情况下,我无法找到如何分配数据部分,而只能使用data_size变量。我发现了这个memcopy函数,但即使这样也需要数据类型。

请帮忙。

标签: cadtdynamic-memory-allocationvoid-pointers

解决方案


如果只想保存指向数据的指针,只需复制指针即可:

newNode->data = data;

如果要复制它指向的内容,则需要malloc获取内存并memcpy复制字节:

newNode->data = malloc(data_size);
memcpy(newNode->data, data, data_size);

的签名memcpy是:

void *memcpy(void *dest, const void *src, size_t n);

它旨在复制通用内存,因此您可以将它传递给void *源和目标。


推荐阅读