插入新节点

时间:2014-03-06 06:18:48

标签: c linked-list

这是我编写的程序的一个功能,以便更熟悉节点。

它创建一个新节点并将信息插入代码字段,然后指向现有的第一个节点。然后将头部分配给新创建的节点;

不幸的是,它为new_node提供了一个不兼容的类型 - > location = code;

typedef char LibraryCode[4];

typedef struct node {
    LibraryCode location;
    struct node *next;
} Node;

void insertFirstNode(LibraryCode code, Node **listPtr) {
    Node *new_node;
    new_node=malloc(sizeof(Node));
    new_node->location = code;
    new_node->next = *listPtr;
    *listPtr = new_node;
}

1 个答案:

答案 0 :(得分:1)

LibraryCode typdefchar [4]。您不能只将一个数组分配给另一个数组,您需要memcpystrcpy从一个数组到另一个数组的数据。

一个更简单的例子:

void foo() {
   char a[4];
   char b[4];
   a = b;
}

编译它会产生错误:

In function ‘foo’:
error: incompatible types when assigning to type ‘char[4]’ from type ‘char *’
   a = b;
     ^

你可以看到你实际上是在尝试分配一个指向数组的指针,这些指针是不兼容的类型。


无论如何,typedef char LibraryCode[4];可能不是一个好主意。如果你要为你的节点中的字符串保留一个固定大小的缓冲区,那么我就会放弃typedef,这样就可以清楚你正在做什么了。另外,我绝不会将char [4] 按值传递给函数。对于字符串,请传递const char*