如何在不知道数据类型的情况下写入空指针?
How to write to a void pointer without knowing the Data Type?
我正在尝试使用 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
函数,但即使那样也需要数据类型。
请帮忙。
如果只想保存指向数据的指针,可以只复制指针:
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 *
。
我正在尝试使用 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
函数,但即使那样也需要数据类型。
请帮忙。
如果只想保存指向数据的指针,可以只复制指针:
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 *
。