如何在C中初始化结构内的结构?

时间:2013-10-20 22:58:58

标签: c struct initialization structure

我有这两种结构:

struct member {
  char *nickname;
  char *group;
};

struct node {
   struct member mbr;
   struct node   *next;
};

在我的代码中,我这样做:

struct node* n = (struct node*)malloc(sizeof(struct node));

运行程序时,此行会出现“Segmentation fault”错误:

strcopy(n->mbr.nickname, temp->nickname);

我已经尝试了一段时间来解决这个问题并且我在网上搜索过,但我还没有找到任何解决方案。我猜测'n'里面的结构没有被初始化。我做了一些看起来像的测试:

n->mbr = (struct member*)malloc(sizeof(struct member));

但后来又出现了另一个错误:“从类型'struct member *'分配类型'struct member'时出现不兼容的类型”...

谁能告诉我我做错了什么?感谢。

1 个答案:

答案 0 :(得分:2)

您无需分配mbr;你需要分配mbr.nickname

struct node* n = malloc(sizeof (struct node));
n->mbr.nickname = malloc(some number of characters);

然后使用strncpy。可替代地,

n->mbr.nickname = strdup(temp->nickname);

与执行此操作相同,但使用strlen(temp->nickname) + 1作为大小。