结构如下所示:
typedef char AirportCode [4];
typedef struct node {
AirportCode airport;
struct node *next;
}Node;
我的功能如下:
void insertFirst(AirportCode code, Node **listPtr){
Node *Holder = *listPtr;
Node *newNode = (Node *)malloc(sizeof(Node));
if (*listPtr == NULL){
(*listPtr)->airport = code;
(*listPtr)->next = NULL; }
else{
*listPtr = newNode;
newNode->airport = code;
newNode->next = holder; }
}
错误消息是:
incompatible types when assigning to type 'AirportCode' from type 'char *'
此错误消息位于我分配代码值的两行上。
答案 0 :(得分:1)
问题是您无法在C
中分配数组。您只能初始化它们。此外,您不能将数组传递给函数 - 实际传递的是指向数组的第一个元素的指针。以下陈述
typedef char AirportCode[4];
定义AirportCode
类型的char[4]
类型 - 4
个字符数组。在您的函数insertFirst
中,您要将code
类型char *
分配给(*listPtr)->airport
AirportCode
或char[4]
。这两个是不兼容的类型,因此您收到错误。
由于无法将数组传递给函数,因此您应该将指针传递给数组的第一个元素和数组长度。然后将数组复制到结构的相应成员。
以下三个声明完全相同。函数中的数组参数实际上是指向字符的指针。
void insertFirst(AirportCode code, Node **listPtr);
void insertFirst(char code[4], Node **listPtr);
void insertFirst(char *code, Node **listPtr);
此外,您不应该投射malloc
的结果。不要让typedef
混淆命名空间并导致混淆。在这种情况下,没有它你会更好。如果if
条件*listPtr == NULL
是true
,那么您将取消引用块中的空指针,这显然是一个错误。
if(*listPtr == NULL) {
// the below statements dereference the null pointer
// which is an error and would cause program crash
// due to segfault.
(*listPtr)->airport = code;
(*listPtr)->next = NULL;
}
在else
块中,我假设您正在尝试在链接列表的开头添加新节点。我建议进行以下更改(感谢Jonathan Leffler)。
typedef struct node {
char airport[4]; // no typedef. explicit array declaration.
struct node *next;
} Node;
void insertFirst(char *code, Node **listPtr) {
Node *oldHead = *listPtr;
Node *newNode = malloc(sizeof(Node));
if(newNode == NULL) { // check for NULL
printf("Not enough memory to allocate\n");
return;
}
// if the struct member code is a string, then use strncpy to
// guard against buffer overrun, else use memcpy to copy
// code to airport. this is assuming that the buffer pointed
// to by code is never smaller than sizeof newNode->airport
memcpy(newNode->airport, code, sizeof newNode->airport);
newNode->next = oldHead;
*listPtr = newNode; // make listPtr point to the new head
}
答案 1 :(得分:0)
基础知识就像这样
int a=10,b;
b=a
高于works Fine
对于数组
是一样的int a[]={1,2,3};
int b[3]
b=a; ---> this wrong way
correct way is
for(i=0;i<3;i++)
{
b[i]=a[i];
}
OR
strcpy(b,a);
char a[4],b[4];
gets(a);
b=a;----->wrong assigning
correct way
strcpy(b,a);
有关详细信息,请查看Inserting New Node