2013-10-20 70 views
0

我有这两种结构:如何初始化C中结构中的结构?

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)); 

但后来我得到另一个错误:“分配给从输入型“结构成员‘结构成员*’时不兼容的类型” ......

灿有人告诉我我做错了什么?谢谢。

+1

'strcopy()'是一个错字还是你自己的函数? –

回答

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作为大小。

+1

嗯,无论如何,当字符串长度已知时,'strncpy'不是一个好主意。那么最好使用'memcpy'。 –

+0

@JensGustedt:字符串的长度是否已知?如果想法是使用'temp-> nickname'找到它,我已经添加了'strdup'。 – Ryan

+0

可能值得一提的是,strdup是POSIX,而不是标准C. – jpw