gpt4 book ai didi

c - 如何在 C 中的结构中包含动态数组?

转载 作者:行者123 更新时间:2023-11-30 16:38:01 26 4
gpt4 key购买 nike

我环顾四周,但无法找到一个解决方案来解决这个问题。这是我的代码:

 #include <stdlib.h>

struct my_struct {
int n;
char s[]
};

int main()
{
struct my_struct ms;
ms.s = malloc(sizeof(char*)*50);
}

这是 gcc 给我的错误:错误:灵活数组成员的使用无效

如果我将结构体中 s 的声明声明为

,我就可以编译它
char* s

这可能是一个更好的实现(指针运算比数组更快,是吗?)但我认为在 c 中声明

char s[]

相同
char* s

最佳答案

您现在编写的方式过去被称为“struct hack”,直到 C99 将其祝福为“灵活的数组成员”。您收到错误的原因(可能无论如何)是它后面需要跟一个分号:

#include <stdlib.h>

struct my_struct {
int n;
char s[];
};

当您为此分配空间时,您需要分配结构体的大小加上您想要为数组分配的空间量:

struct my_struct *s = malloc(sizeof(struct my_struct) + 50);

在这种情况下,灵活数组成员是一个 char 数组,并且 sizeof(char)==1,因此您不需要乘以它的大小,但就像您需要的任何其他 malloc 一样,如果它是其他类型的数组:

struct dyn_array { 
int size;
int data[];
};

struct dyn_array* my_array = malloc(sizeof(struct dyn_array) + 100 * sizeof(int));

编辑:这与将成员更改为指针给出了不同的结果。在这种情况下,您(通常)需要两次单独的分配,一次用于结构本身,一次用于指针指向的“额外”数据。使用灵活的数组成员,您可以在单个 block 中分配所有数据。

关于c - 如何在 C 中的结构中包含动态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631078/

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