【问题标题】:Trouble with structs and strings结构和字符串的问题
【发布时间】:2014-11-20 04:39:28
【问题描述】:

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

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

【问题讨论】:

  • 您的struct node 声明不正确。您不能在其声明中分配内存。
  • 请回滚您的编辑,以便我们看到代码

标签: c string struct linked-list


【解决方案1】:

你的直接问题是类型定义。您不能从那里调用malloc(),您所能做的就是定义字段。内存分配必须稍后进行。所以,应该是:

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

一旦你解决了这个问题,你就会遇到另一个问题(运行时而不是编译时)。当您执行以下操作时:

p -> familyName = famName;

简单地将指针复制到您的结构中,并且指针始终main()familyName的内存位置。

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

您不会注意到当前代码的问题,因为您只要求一条记录。但是当您开始循环获取更多记录时,这将成为一个问题。

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

p -> familyName = strdup (famName);

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

万一您的 C 实现没有strdup(),请参阅here

【讨论】:

    【解决方案2】:

    有几个问题:-

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 2015-08-26
      • 2011-03-19
      • 1970-01-01
      相关资源
      最近更新 更多