C中struct中数组和字符串的动态内存分配

C中struct中数组和字符串的动态内存分配,c,structure,dynamic-memory-allocation,C,Structure,Dynamic Memory Allocation,我想创建一个结构,但我也想用动态内存分配来编写它的数组或字符串元素 struct st { char *name[40]; int age; }; 对于“name”字符串,我应该在struct之前使用malloc,还是也可以在struct中使用它 (一) (二) 它们都是真的还是有错误?如果这两个都是真的,那么哪一个对代码的其他部分更有用?一个选项是在结构中有一个指针,但在使用它的函数中在结构之外分配内存 e、 g 一个选项是在结构中有一个指针,但在使用它的函数中在结构外部分配

我想创建一个结构,但我也想用动态内存分配来编写它的数组或字符串元素

struct st {
    char *name[40];
    int age;
};
对于“name”字符串,我应该在struct之前使用malloc,还是也可以在struct中使用它

(一)

(二)


它们都是真的还是有错误?如果这两个都是真的,那么哪一个对代码的其他部分更有用?

一个选项是在结构中有一个指针,但在使用它的函数中在结构之外分配内存

e、 g


一个选项是在结构中有一个指针,但在使用它的函数中在结构外部分配内存

e、 g

您需要创建该结构的一个实例,它的一个实际变量。然后需要初始化函数中结构实例的成员

例如,在某些函数中,您可以

struct st instance;
instance.name = malloc(...);  // Or use strdup if you have a string ready
instance.age = ...;
您需要创建该结构的一个实例,它的一个实际变量。然后需要初始化函数中结构实例的成员

例如,在某些函数中,您可以

struct st instance;
instance.name = malloc(...);  // Or use strdup if you have a string ready
instance.age = ...;

声明类型不会创建左值(如变量)。它定义左值的格式。在1)中,您已经正确地声明了一个结构类型,但是您似乎已经假设了结构声明中“name”变量的相似性将指针“name”与结构成员“name”关联起来。它不是那样工作的

2) 语法/符号错误。您不能将malloc()赋值给非左值(因为您正在声明类型结构)

因此,按照在1)中创建的方法,从结构类型中创建一个变量,并在结构变量成员中分配内存

typedef struct st {
    char *name;
    int age;
} st_type;

st_type st_var;
st_var.name = (char *) malloc(sizeof(char) * 40); // This is how you will allocate the memory for the struct variable.

请记住,在执行动态分配之前,您需要有一个左值,就像您对独立的“name”变量所做的那样。

声明类型不会创建左值(如变量)。它定义左值的格式。在1)中,您已经正确地声明了一个结构类型,但是您似乎已经假设了结构声明中“name”变量的相似性将指针“name”与结构成员“name”关联起来。它不是那样工作的

2) 语法/符号错误。您不能将malloc()赋值给非左值(因为您正在声明类型结构)

因此,按照在1)中创建的方法,从结构类型中创建一个变量,并在结构变量成员中分配内存

typedef struct st {
    char *name;
    int age;
} st_type;

st_type st_var;
st_var.name = (char *) malloc(sizeof(char) * 40); // This is how you will allocate the memory for the struct variable.

请记住,在执行动态分配之前,您需要有一个左值,就像您对独立“name”变量所做的一样。

有一个错误,您不能在定义中初始化结构成员。您显示的第一个结构有一个指向
char
的40个指针的数组,即一个40个字符串的数组。第二个结构(备选方案1)将只有一个指针,它与您在结构之前定义的
name
变量完全无关。第三个结构(备选方案2)将无法编译。@JoachimPileborg所以我们不能对struct使用动态分配吗?您想动态分配结构,还是为
名称
成员分配内存?另外,为
name
成员动态分配内存(编译时常量为固定大小)没有任何意义,只需使用数组。@JoachimPileborg我想动态分配“name”成员,静态数组对我的作业是禁止的,我必须为“name”使用动态内存分配有错误,无法在定义中初始化结构成员。显示的第一个结构有一个指向
char
的40个指针的数组,即一个40个字符串的数组。第二个结构(备选方案1)将只有一个指针,它与您在结构之前定义的
name
变量完全无关。第三个结构(备选方案2)将无法编译。@JoachimPileborg所以我们不能对struct使用动态分配吗?您想动态分配结构,还是为
名称
成员分配内存?另外,为
name
成员动态分配内存(编译时常量为固定大小)没有任何意义,只需使用数组。@JoachimPileborg我想动态分配“name”成员,静态数组禁止我的作业,我必须为“name”使用动态内存分配实例是否应该是指针?我们可以像“instance.name=malloc(…);”这样写吗?instance应该是指针吗?我们可以像“instance.name=malloc(…);”这样写吗?我可以在每个函数中使用“name”而不在此过程后再次分配吗?我可以在每个函数中使用“name”而不在此过程后再次分配吗?
typedef struct st {
    char *name;
    int age;
} st_type;

st_type st_var;
st_var.name = (char *) malloc(sizeof(char) * 40); // This is how you will allocate the memory for the struct variable.