C语言 结构和字符串的问题



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

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

您的直接问题是类型定义。您不能从那里调用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(),请参阅此处

有几个问题:-

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

相关内容

  • 没有找到相关文章

最新更新