我正在做关于机场模拟的课程,而且我在尝试将信息存储在角色阵列部分时遇到了一些麻烦。
我应该键入一个字符串,它将存储在节点的planeName
部分,但它似乎无法正常工作。我的int main()
现在几乎是空的,因为我不想继续使用不正确的函数进行编码。
以下是我的代码:
struct node {
char planeName[5];
int planeNumber;
struct node* next;
};
struct node* front = NULL;
struct node* rear = NULL;
void Enqueue(char name[5], int x);
int main() {
}
void Enqueue(char name[5], int x){
struct node* temp = (struct node*)malloc(sizeof(struct node));
temp -> planeName = name;
temp -> planeNumber = x;
temp -> next = NULL;
if (front == NULL && rear == NULL)
front = rear = temp;
rear -> next = temp; //set address of rear to address of temp
rear = temp; //set rear to point to temp
return;
}
包含以下内容的 This is the error message行:temp -> planeName = name
这是弹出错误消息的部分,我不知道为什么会发生这种情况。
如果我的问题不够明确,有人可以帮助并提出更多问题吗?
答案 0 :(得分:5)
temp -> planeName = name;
您无法分配数组。数组不能用作左值。请改用strcpy
-
strcpy(temp -> planeName,name);
注意 - 但在将char
数组传递给strcpy
之前,请确保它们已被终止。
答案 1 :(得分:2)
您的字符串是字符数组,因此您必须复制各个元素。幸运的是,有一些函数(比如strcpy)就是为了做到这一点。
答案 2 :(得分:1)
错误来自于您通过复制数组planeName
的名称来执行浅层副本。
如果要复制数组,则需要复制它的每个元素,如果数组的最后一个元素包含指示其结尾的特殊字符,例如字符\0
,则可以更轻松地完成此操作。
包含最后一个字符的数组\0
被称为: null终止。有许多函数在空终止数组上执行操作。你需要的是:
char * strcpy ( char * destination, const char * source );
将复制以source
传递给destination
的空终止数组的所有元素。在您的情况下,它将如下所示:
strcpy(temp -> planeName,name);
以下是strcpy()
的简要信息。