[英]initialization of malloc for struct type
struct Person{
char *name;
int numb;
char *var;
};
我在上面创建了一个人。
struct Person *per1=malloc(sizeof(struct Person));
char per1_name[]="leo";
per1->name=malloc(strlen(per1_name)+1);
strcpy(per1->isim,per1_name);
per1->numb=12;
char per1_var[]="Twitter";
per1->var=malloc(strlen(per1_var)+1);
strcpy(per1->var,per1_var);
我总是这样初始化它,你可以看到它很长,那么有没有简单的方法来初始化包含字符串的结构类型?
您可以使用宏来简化/缩短您的代码。 您也可以使用单独的 function 来初始化您的结构。
struct Person{
char *name;
int numb;
char *var;
};
#define MK_PERSON(per1, name, var, numb) \
struct Person *per1=malloc(sizeof(struct Person));\
per1->name=malloc(strlen(name)+1);\
strcpy(per1->name,name);\
per1->numb=numb;\
per1->var=malloc(strlen(var)+1);\
strcpy(per1->var,var);
struct Person * mk_person(const char *name, const char *var, int numb){
struct Person *per1=malloc(sizeof(struct Person));
per1->name=malloc(strlen(name)+1);
strcpy(per1->name,name);
per1->numb=numb;
per1->var=malloc(strlen(var)+1);
strcpy(per1->var,var);
return per1;
}
int main(){
MK_PERSON(pers1, "Bob","m", 12);
struct Person *pers2 = mk_person("Mike", "m", 13);
}
这样,您只需进行一次/测试和调试初始化,以后就可以安全地使用它,同时确保一切正常。
我建议使用 function 代替宏。
您可以编写一个 function 来初始化您的结构:
void InitializePerson(struct Person *person, const char* name, int number, const char* var)
{
person->name = strdup(person);
person->var = strdup(var);
person->numb = number;
}
int main()
{
struct Person* per1 = malloc(sizeof(struct Person));
InitializePerson(per1, "leo", 12, "Twitter");
}
这只是众多可能性之一。 另请注意,为简洁起见,没有任何错误检查。
如果strdup
在您的平台上不可用,您可以自己编写,它基本上是 3 行代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.