我有这两种结构:
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'时出现不兼容的类型”...
谁能告诉我我做错了什么?感谢。
答案 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
作为大小。