【问题标题】:How to write to a void pointer without knowing the Data Type?如何在不知道数据类型的情况下写入 void 指针?
【发布时间】:2018-11-13 02:59:15
【问题描述】:

我正在尝试使用 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 函数,但即使这样也需要数据类型。

请帮忙。

【问题讨论】:

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


    【解决方案1】:

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

    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 * 传递给源和目标。

    【讨论】:

    • memcpy 不需要数据类型吗?
    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多