这是我编写的程序的一个功能,以便更熟悉节点。
它创建一个新节点并将信息插入代码字段,然后指向现有的第一个节点。然后将头部分配给新创建的节点;
不幸的是,它为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;
}
答案 0 :(得分:1)
LibraryCode
typdef
为char [4]
。您不能只将一个数组分配给另一个数组,您需要memcpy
或strcpy
从一个数组到另一个数组的数据。
一个更简单的例子:
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*
。