[英]C dynamically allocate struct type
我有一个定义如下的结构
typedef struct{
int year;
char* name;
int id;
}person;
如何动态分配人员对象并将我的数据插入其中? 我的数据如下所示
int personYear = 20;
int personId = 12345678;
char* personName = "firstname lastname";
我知道对于声明我可以做
person* p = (person*) malloc(sizeof(person));
p->year = personYear;
p->id = personId;
但在那之后,我如何为char* person?
做插入char* person?
我是否必须重新分配空间来保存内存空间?
// my thought
p->name = (char*) malloc (sizeof(char));
int counter = 0;
while (*personName != '\0')
{
counter++;
name = (char*) realloc (name, counter+1) // hold 1 more byte
*(name+counter) = '\0'; //make sure intialize the value
*(name+counter-1) = *personName;
personName++;
}
//what's next?
真正令人困惑的是,由于 struct 在 C 中有内存对齐,并且在运行时,我们的程序不知道 person->name 将保存多少字节,我们是否需要继续为 struct 本身重新分配内存空间? 正确的做法是什么?
解决该问题的一种方法是使用灵活的结构成员。 它的工作原理是在结构体之后放置一个数组。 在这种情况下,它将是一个带有名称字符串的char
数组。
typedef struct {
int year;
int id;
char name[]; // flexible member
}person;
分配struct person
只需添加额外的strlen(name) + 1
个字节,并将name
复制到那里。
person* make_person(int year, int id, char *name) {
person *p = malloc(sizeof *p + strlen(name) + 1);
if (!p) return NULL; // out of memory
p->id = id;
p->year = year;
strcpy(p->name, name);
return p;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.