c - 如何在不知道数据类型的情况下写入 void 指针?

标签 c adt dynamic-memory-allocation void-pointers

我正在尝试使用 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 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53273150/

相关文章:

c - 函数在 EditBox winApit 中获取选中的文本

c++ - 关闭套接字如何影响其他方读取

c - c中数组的问题

android - android_winusb.inf 中的 SingleAdbInterface、CompositeAdbInterface 和 SingleBootLoaderInterface 是什么

c - 为什么第 33791 个素数 (399137) 会导致 Segmentation Fault?

c - 输入文件中数组字符串的动态内存分配

c - 检测两个字符串之间的重叠长度

android - 在 ant 中使用密码自动签署应用程序

arrays - malloc 接触未分配的内存

android - 将项目集成为一个包的有效方法?