结构和字符串的麻烦

时间:2014-11-20 04:39:29

标签: c string struct linked-list

我制作了一个链表,其节点包含4个字符串值。当我调用newNode函数时,错误显示“节点没有名为familyName的成员”,以及其他成员。我的代码:

我真的很困惑字符串在结构中的工作方式。

2 个答案:

答案 0 :(得分:1)

您的立即问题是类型定义。你不能从那里打电话给malloc(),你所能做的就是定义字段。内存分配必须在以后进行。所以,它应该是:

typedef struct node{
    char *familyName;
    char *firstName;
    char *address;
    char *phoneNumber;
    struct node *link;
}Node;

一旦你解决了这个问题,你就会遇到另一个问题(运行时而不是编译时)。当你做类似的事情时:

p -> familyName = famName;

只是将指针复制到您的结构中,指针总是 familyNamemain()的内存位置。

这意味着每个节点都将指向相同的内存,并且您不断更新该内存。

您不会注意到代码的问题,因为您只需要一条记录。但是当你开始循环以获得更多记录时,它将成为一个问题。

最好的办法是使用strdup()之类的内容来传入传入的字符串的副本,然后每个节点都有自己的字符串内存位置:

p -> familyName = strdup (famName);

(完成后,不要忘记每个字段的内存free()。)

如果您的C实施不 strdup(),请参阅here

答案 1 :(得分:0)

有几个问题: -

  • 声明结构时不允许分配内存。或者,在malloc方法中执行newNode()或者,将结构声明为char familyName[50]
  • 不应该使用malloc的结果。
  • 复制字符串时最好使用strcpy(或strdup)