繁体   English   中英

为结构类型初始化 malloc

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM