Ошибка "левый операнд должен быть левосторонним значением" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание заключалось в том, чтобы переделать структуру под стек, но в функции vvod в 40 строке "p->marka = m;" выдает ошибку "левый операнд должен быть левосторонним значением". Не могу понять, в чем ошибка
#include <stdio.h>                      
#include <string.h>
#include <stdlib.h>

struct autoservis      
{
    int num;
    char marka[50];
    int probeg;
    struct autoservis *next;
};
 
typedef struct autoservis St;
St *last = NULL;
 
int i, k, n, pr;
char m[50];

void vvod()
{
    St *p;
    p = new St;
 
    printf("Vvedite kol-vo avtomobilej: ");
    scanf_s("%d", &k);
 
    if (p != 0)
    {
        for (i = 0; i < k; i++)
        {
            puts("Vvedite registrazionniy nomer: ");
            scanf_s("%d", &n);
            p->num = n;
 
            puts("Vvedite marku: ");
            fflush(stdin);
            gets_s(m);
            p->marka = m;
 
            printf("Vvedite probeg: ");
            scanf_s("%d", &pr);
            p->probeg = pr;
 
            p->next = last;
            last = p;
        }
    }
    else printf("Oshibka pri vidilenii pamjati\n");
}

void poisk()   
{
    St *psk = last;
    int nomer;
 
    if (psk == NULL){
        printf("Net avtomobilej\n");
    }
    else
    {
        printf("Vvedite reg. nomer: \n");
        scanf_s("%d", &nomer);
 
        while (psk != NULL)
        if (psk->num == nomer)
        {
            printf("Registrazionniy nomer: %d \n", psk->num);
            printf("Marka: %s \n", psk->marka);
            printf("Probeg: %d \n", psk->probeg);
        }
        else
            psk = psk->next;
    }
    
}

void udalenie()  
{
    St *po;
    po = new St;
 
    po = last;
    last = last->next;
    free(po);
    printf("Udalenije vipolneno\n");
}

void vivod()  
{
    St *o = last;
 
    if (o == NULL) printf("Stek pust\n");
    else
    {
        printf("Stek: \n");
        while (o != NULL)
        {
            printf("Reg. nomer: %d, Marka: %s, Probeg: %d\n", o->num, o->marka, o->probeg);
            o = o->next;
        }
        printf("\n");       
    }
}

int check()
{
    return (last == NULL);
}

int menu()  
{
    int ch;
    printf("\n   Menu: \n");
    printf("1. Vvod massiva structur \n");
    printf("2. Poisk v massive structyr po zadannomy parametry \n");
    printf("3. Ydalenie structuri iz massiva \n");
    printf("4. Vivod structuri \n");
    printf("5. Vikhod\n");
    printf("\t Vash vibor: ");
    scanf_s("%d", &ch);
    return ch;
}
 
int main()
{
    while (1)
    {
        switch (menu())
        {
        case 1:
            vvod();
            break;
        case 2:
            poisk();
            break;
        case 3:
            if (!(check())){
                udalenie();
                break;
            }
            else{
                printf("Stek pust\n");
                break;
            }   
        case 4:
            vivod();
            break;
        case 5:
            return 0;
        default:
            printf("\n");
            break;
        }
    }
}

Решение задачи: «Ошибка "левый операнд должен быть левосторонним значением"»

textual
Листинг программы
strcpy(p->marka , m);

Объяснение кода листинга программы

В данном коде происходит копирование строки из одного места в другое.

  1. Переменная p содержит указатель на структуру.
  2. Переменная marka является полем структуры, в которое будет скопирована строка.
  3. Переменная m содержит строку, которую необходимо скопировать. Выполняется функция strcpy, которая принимает два аргумента:
  4. Указатель на строку, из которой необходимо скопировать символы.
  5. Указатель на строку, в которую необходимо скопировать символы. Функция strcpy работает следующим образом:
  6. Пока не встретится ноль символа в строке, с которой мы работаем (m), копируем каждый символ в строку, на которую мы работаем (marka).
  7. После встречи с нулевым символом, прекращаем копирование. Ошибка левый операнд должен быть левосторонним значением говорит о том, что в данной строке встречается некорректная операция с указателем и/или строкой. В данном случае, возможно, что указатель p не указывает на начало структуры или поле структуры marka не является строкой.

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы