Ошибка "левый операнд должен быть левосторонним значением" - 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);
Объяснение кода листинга программы
В данном коде происходит копирование строки из одного места в другое.
- Переменная
pсодержит указатель на структуру. - Переменная
markaявляется полем структуры, в которое будет скопирована строка. - Переменная
mсодержит строку, которую необходимо скопировать. Выполняется функцияstrcpy, которая принимает два аргумента: - Указатель на строку, из которой необходимо скопировать символы.
- Указатель на строку, в которую необходимо скопировать символы.
Функция
strcpyработает следующим образом: - Пока не встретится ноль символа в строке, с которой мы работаем (m), копируем каждый символ в строку, на которую мы работаем (marka).
- После встречи с нулевым символом, прекращаем копирование.
Ошибка
левый операнд должен быть левосторонним значениемговорит о том, что в данной строке встречается некорректная операция с указателем и/или строкой. В данном случае, возможно, что указательpне указывает на начало структуры или поле структурыmarkaне является строкой.