c - 如何在不知道数据类型的情况下写入 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 *
源和目标。
推荐阅读
- sql - oracle按列求和而不使用联合
- c# - Web API HttpDelete - 如何调用删除 API 方法并在 [FromBody] 中发送模型
- azure - 将项目添加到服务总线的 Azure API 管理策略 - 应返回错误
- flutter - Flutter 使用 map 将数据从列表类对象加载到 DropdownMenuItem
- swift - Swift 中是否有 Kotlin 等效的“对象”?
- amazon-web-services - 如何将弹性 ip 分配给现有的 AWS 应用程序负载均衡器?
- android - 如何从我的 webview 应用程序(如 Instagram 等)打开其他应用程序?
- node.js - 一个 API 调用 vs 多个
- android - 如何从文档文件路径中获取内容 Uri?
- javascript - 转换 JavaScript 对象 - JavaScript