Вы не можете ничего присвоить переменной массива в C . Это не «изменяемое значение». Из спецификации, §6.3.2.1 L-значения, массивы и обозначения функций :
lvalue - это выражение с типом объекта или неполным типом, отличным от void
; если lvalue не обозначает объект при его оценке, поведение не определено. Когда говорят, что объект имеет определенный тип, тип определяется значением l, используемым для обозначения объекта. модифицируемое значение lvalue - это значение lvalue, которое не имеет типа массива, не имеет неполного типа, не имеет типа с константой, и если это структура или объединение, не имеет какого-либо члена ( включая, рекурсивно, любой элемент или элемент из всех содержащихся агрегатов или объединений) с типом, определенным const.
Сообщение об ошибке, которое вы получаете, немного сбивает с толку, потому что массив в правой части выражения превращается в указатель перед присваиванием. То, что у вас есть, семантически эквивалентно:
message1 = &message2[0];
Что дает тип правой стороны char *
, но, поскольку вы все еще не можете назначить что-либо для message1
(это массив типа char[100]
), вы получаете ошибку компилятора, которую видите. Вы можете решить свою проблему, используя memcpy(3)
:
memcpy(message1, message2, sizeof message2);
Если вы по какой-то причине действительно настроили свое сердце на использование =
, вы можете использовать массивы внутри структур ... хотя на самом деле это не рекомендуемый путь.