gpt4 book ai didi

c - 在 C 中定义弹性/柔性结构

转载 作者:行者123 更新时间:2023-11-30 16:34:43 25 4
gpt4 key购买 nike

我有一个任务要做,任务内容是:

请提出一个链接列表的定义,该定义将使人员的姓名和年龄保持在灵活的结构中。然后编写插入具有给定名称和年龄的元素的过程。

到底什么是柔性结构?如何定义呢?那么如何分配大小呢?

typedef struct Test {
int age; // ?
char name[?]; // ?
struct Test * next;
}Structure;

int main(void) {
Structure *one = malloc(???);
}

最佳答案

您走在正确的道路上。然而,不存在“灵活的结构”。您想要在 struct 中使用灵活数组成员(自 C99 起可用):

typedef struct {
int age;
size_t name_size; // size of the array, not length of the name!
char name[]; // Flexible array member
} Structure;

int main(void) {
Structure *one = malloc(sizeof(*one) + SIZE_OF_NAME_ARRAY);
}

注意我添加了一个 name_size 字段。 C 不存储分配的数组的大小,因此您可能需要它来进行安全复制/比较等(防止缓冲区溢出)。

使用*one使该术语独立于实际使用的类型。这种结构的大小就好像数组有零个元素一样。但是,它将正确对齐,因此它可能与没有数组的相同struct不同。

另请注意,如果您使用 char 数组以外的其他数组,则必须将分配的大小更改为 sizeof(element_type) * ARRAY_SIZE 之类的值。这对于 char 来说不是必需的,因为它们的大小由标准定义为 1

关于c - 在 C 中定义弹性/柔性结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49218673/

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