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.