我无法在链表的节点中存储一串字符

时间:2016-01-01 16:05:31

标签: c linked-list

我正在做关于机场模拟的课程,而且我在尝试将信息存储在角色阵列部分时遇到了一些麻烦。

我应该键入一个字符串,它将存储在节点的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

这是弹出错误消息的部分,我不知道为什么会发生这种情况。

如果我的问题不够明确,有人可以帮助并提出更多问题吗?

3 个答案:

答案 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()的简要信息。