Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/48: Рейтинг темы: голосов - 48, средняя оценка - 4.71
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255

Ошибка C2106.

20.09.2011, 23:20. Показов 10301. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, при попытке символьному элементу структуры (char name [30]) присвоить такой же символьный элемент выдается ошибка C2106 - левый операнд должен быть левосторонним значением. Вот фрагмент листинга, на всякий случай с описанием самой структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
..........
struct List {
        int shifr;
        char name [30];
        int kol;
        float stoim;
    };
List MasList [100],min;
..........
..........
min.shifr=MasList[i].shifr;
        min.name=MasList[i].name; //<------ Эта строка.
        min.kol=MasList[i].kol;
        min.stoim=MasList[i].stoim;
Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2011, 23:20
Ответы с готовыми решениями:

Выдает: Ошибка C2296 Ошибка C2106
Ребят помогите, не могу понять, что не так #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; using namespace std; int...

Error C2106 как обойти?
Вот фрагмент кода на Delphi Type matr=array of real; vect=array of real; ... X1:matr; Y1,Z1:vect; ... X1:=alpha;...

Error C2106: '=' : left operand must be l-value
Всем привет. Вот у меня есть такой хедер: #ifndef MATRIXX_H #define MATRIXX_H #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

39
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
21.09.2011, 00:03  [ТС]
Студворк — интернет-сервис помощи студентам
Вот так пробовать?
strcpy (min.name, MasList[i].name);
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:05
Chelioss, вот.

int numbers [20];
int * p;

The following assignment operation would be valid:

p = numbers;

After that, p and numbers would be equivalent and would have the same properties. The only difference is that we could change the value of pointer p by another one, whereas numbers will always point to the first of the 20 elements of type int with which it was defined. Therefore, unlike p, which is an ordinary pointer, numbers is an array
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:05
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Вот так пробовать?
strcpy (min.name, MasList[i].name);
Да, но сперва надо было проверить. Может быть и не надо было бы этот вопрос задавать)
1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:08
BoBaH26, первый аргумент - то, куда, копируете, второй - то, откуда.

Добавлено через 2 минуты
вот, например

C++
1
2
char hello[30];
hello = "asdasd";
error: incompatible types in assignment of 'const char [7]' to 'char [30]'

Видите, как типы определяются компилятором?
1
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
21.09.2011, 00:11  [ТС]
talis, вот именно этого я пока и не понял. Ведь char hello[30] мы можем заполнить с помощью ввода: cin>>hello; Так почему нельзя присвоить ему это значение "asdasd"?
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:14
BoBaH26, при вызове cin >> hello реально происходит вызов функции:

istream & operator>>( istream & is, char * buffer );

И hello попадает в неё в качестве второго параметра, а cin - в качестве первого. Из-за близости природы идентификаторов массива и указателя (оба "указывают" на начало какого-то куска памяти), считается нормальным преобразовывать char[30] в char*, передавая в качестве указателя адрес на первый элемент массива char.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:17
BoBaH26
Это называется перегрузкой операции. Можно почитать об этом где-нибудь.
1
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
21.09.2011, 00:21  [ТС]
Спасибо, буду пробовать делать через указатель, т.к. такой способ: strcpy (min.name, MasList[i].name); Мне какжется не рабочим, ибо мы делаем то же самое, что и при присваивании. Мы константе min.name хотим придать значение MasList[i].name?
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:24
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Спасибо, буду пробовать делать через указатель, т.к. такой способ: strcpy (min.name, MasList[i].name); Мне какжется не рабочим, ибо мы делаем то же самое, что и при присваивании. Мы константе min.name хотим придать значение MasList[i].name?
А почему массив name константный? То, что я про указатели говорил забудьте.
Вам надо присвоить name[i] = MasList[i].name[i] , где i = 0,1,2...размер массива -1
Причем можно не весь массив копировать, а ту часть, которая находится до нуль символа и нуль символ тоже не забыть захватить.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:25
Цитата Сообщение от BoBaH26 Посмотреть сообщение
такой способ: strcpy (min.name, MasList[i].name); Мне какжется не рабочим, ибо мы делаем то же самое, что и при присваивании
BoBaH26, нет. Мы вызываем

C
1
2
3
4
5
6
7
8
9
10
char *strcpy( char * dest, const char * src )
{
   int i;
 
   for( i = 0; src[i] != 0; i++ )
      dest[i] = src[i];
 
   dest[i] = 0;
   return dest;
}
(примерная реализация), которая посимвольно копирует одну строку в другую до нуль-терминатора. Это стандартная библиотека Си, которой пользуются уже хрен знает сколько лет, со времён первого UNIX. Не стоит извращаться - пользуйтесь.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:28
Цитата Сообщение от talis Посмотреть сообщение
(примерная реализация), которая посимвольно копирует одну строку в другую до нуль-терминатора. Это стандартная библиотека Си, которой пользуются уже хрен знает сколько лет, со времён первого UNIX. Не стоит извращаться - пользуйтесь.
Для опыта один раз в жизни то стоит написать самому такую функцию) А то странно будет, когда человек знает strcpy, но не знает как присваивать массива в ручную, т.е. алгоритм этой функции.
0
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
21.09.2011, 00:35  [ТС]
Chelioss, так мне не желательно делать name[], т.к. программа большая, а с таким способом задания символьного массива name, будет на порядок труднее, поэтому я могу делать только так: min.name, т.е. должен рассматривать не как массив, а как строку, поэтому здесь скорее подойдет строковая функция копирования strcpy.
talis, я знаю С++ не очень хорошо, пока только начал, поэтому о чем идет речь в этой функции: char *strcpy( char * dest, const char * src ) не знаю..

Добавлено через 1 минуту
Chelioss, так мне не желательно делать name[], т.к. программа большая, а с таким способом задания символьного массива name, будет на порядок труднее, поэтому я могу делать только так: min.name, т.е. должен рассматривать не как массив, а как строку, поэтому здесь скорее подойдет строковая функция копирования strcpy.
talis, я знаю С++ не очень хорошо, пока только начал, поэтому о чем идет речь в этой функции: char *strcpy( char * dest, const char * src ) не знаю..

Добавлено через 2 минуты
Chelioss, не ну самое элементарное я знаю, как присваивать в цикле элементы массиву.. Просто со строками пока туговато..
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:39
BoBaH26, как присваивать строки:

присваиваете элементы массива, пока значение элемента исходного массива не станет равно нулю (не достигните нуль-терминатора). как вариант - с учётом длин массивов, но особого смысла не имеет, если только конечный массив не меньше исходного.
1
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:40
Без функции strcpy не обойтись. Можно, конечно, воспользоваться функцией memcpy, только хрен редьки не слаще.
1
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
21.09.2011, 00:43  [ТС]
Большое Вам спасибо, завтра буду пробовать.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:43
Цитата Сообщение от Chelioss Посмотреть сообщение
Можно, конечно, воспользоваться функцией memcpy, только хрен редьки не слаще.
Ага. То же самое, только помимо реально информативной части до нуль-терминатора, копирует ещё и весь мусор после него.
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:44
Цитата Сообщение от talis Посмотреть сообщение
Ага. То же самое, только помимо реально информативной части до нуль-терминатора, копирует ещё и весь мусор после него.
Это я знаю, просто пример привел еще один.
Да и пример использования этой функции на cplusplus.com использует именно строки)
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:46
Chelioss, да я не вам. Я знаю, что вы знаете
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
21.09.2011, 00:48
Да и можно не копировать всю строку функцией memcpy) Можно только до нуля и включая нуль.
0
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
21.09.2011, 00:50
Ну так чем strcpy и занимается. А есть ещё strncpy, которой можно скопировать либо до достижения нуль-терминатора, либо до достижения определённого количества скопированных символов (что раньше произойдёт). Это поможет спастись от переполнения буфера.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.09.2011, 00:50
Помогаю со студенческими работами здесь

Error C2106: '=' : left operand must be l-value
Добрый день! Пишу программу управления колледжом. И столкнулась с этой ошибкой. У меня есть класс Department который имеет массив...

error C2106: '=' : left operand must be l-value выдаёт ошибку на сортировку
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { setlocale(LC_ALL,...

Функция swap. error C2106: =: левый операнд должен быть левосторонним значением
Выдает ошибки: error C2106: =: левый операнд должен быть левосторонним значением в чем причина? зарание спасибо:) int max; ...

Error C2106 или error C2440
Необходимо создать односвязный список из слов строки.Ошибка в 28 и 35 строке. Код: #include &quot;stdafx.h&quot; #include...

Ошибка компилятора C2106
#include&lt;stdio.h&gt; #include&lt;math.h&gt; #include&lt;locale&gt; void main() { setlocale (LC_ALL , &quot;russian&quot;) ; int n,i; float b,c,h; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru