我制作了一个链表,其节点包含4个字符串值。当我调用newNode函数时,错误显示“节点没有名为familyName的成员”,以及其他成员。我的代码:
我真的很困惑字符串在结构中的工作方式。
答案 0 :(得分:1)
您的立即问题是类型定义。你不能从那里打电话给malloc()
,你所能做的就是定义字段。内存分配必须在以后进行。所以,它应该是:
typedef struct node{
char *familyName;
char *firstName;
char *address;
char *phoneNumber;
struct node *link;
}Node;
一旦你解决了这个问题,你就会遇到另一个问题(运行时而不是编译时)。当你做类似的事情时:
p -> familyName = famName;
只是将指针复制到您的结构中,指针总是 familyName
中main()
的内存位置。
这意味着每个节点都将指向相同的内存,并且您不断更新该内存。
您不会注意到代码的问题,因为您只需要一条记录。但是当你开始循环以获得更多记录时,它将成为一个问题。
最好的办法是使用strdup()
之类的内容来传入传入的字符串的副本,然后每个节点都有自己的字符串内存位置:
p -> familyName = strdup (famName);
(完成后,不要忘记每个字段的内存free()
。)
如果您的C实施不 strdup()
,请参阅here。
答案 1 :(得分:0)
有几个问题: -
malloc
方法中执行newNode()
或者,将结构声明为char familyName[50]
。