Я прохожу курс по моделированию аэропорта, и у меня возникли проблемы с попыткой сохранить информацию в части массива символов.

Я должен ввести строку символов, и она будет сохранена в части узла 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;
}

Это сообщение об ошибке в строке, содержащей: temp -> planeName = name

Это та часть, где появляется сообщение об ошибке, и я понятия не имею, почему это происходит.

Может ли кто-нибудь помочь и задать мне больше вопросов, если мой вопрос недостаточно ясен?

Kate Lee

Ответов: 3

Ответы (3)

The error comes from the fact that you are performing a shallow copy by copying the name of your array planeName.

If you want to copy your array you need to copy each and every element of it, this is done easier if the last element of your array contains a special character indicating its end, for example the character \0.

An array containing as its last character, the \0 is called: null terminated. There are a lot of functions that perform operations on null terminated arrays. The one that you need is:

char * strcpy ( char * destination, const char * source );

which will copy all of the element of the null terminated array passed as source to destination. In your case it will look like this:

strcpy(temp -> planeName,name);

Here is a brief info about strcpy().

temp -> planeName = name;

You can't assign to an array. Array cannot be used as lvalue. Use strcpy instead-

strcpy(temp -> planeName,name);

Note- But make sure your char arrays are nul terminated before passing them to strcpy.

Ваши строки представляют собой массивы символов, поэтому вам нужно скопировать отдельные элементы. К счастью, для этого есть написанные функции (например, strcpy).

2022 WebDevInsider