gpt4 book ai didi

c - 对堆上结构使用结构初始化语法

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:21 26 4
gpt4 key购买 nike

我有一个简单的结构,我想在堆上初始化并在函数中作为指针返回。

struct entry {
const char* const key; // We don't want the key modified in any way
const void* data; // But the pointer to data can change
struct entry* next;
};

有一个问题,我不能 calloc 它并一一初始化成员,因为 key 是一个 const 指针。我在某个地方发现了这种有效的语法:

struct entry* entry = calloc(1, sizeof(struct entry));
*entry = (struct entry) { .key = key, .data = data, .next = NULL };

但我不知道它发生了什么:它是否创建了一个“匿名”结构,然后将其复制到 *entry 所在的位置?使用它是否安全,或者我应该更喜欢创建一个本地结构,然后使用 memcpy 将其复制到正确的位置?

最佳答案

您提交的作业不正确,不应编译。

使用 const 成员初始化分配的结构的正确方法是分配一些内存,创建一个临时结构条目对象,然后使用 memcpy 将该对象复制到分配的内存中:

void* mem = malloc( sizeof( struct entry ) );
struct entry temp = { key , data , NULL };
memcpy( mem , &temp , sizeof( temp ) );
struct entry* e = mem;

关于c - 对堆上结构使用结构初始化语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39011996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com