Другие языки программирования и технологии

[C++ ] Выражение должно быть допустимо для изменения левосторонним значением

Есть два варианта решения проблемы. Выбор варианта зависит от дальнейших действий программы.
Первый при котором то что находится в name невозможно менять (не факт что в имени например "сергей" нужно будет изменить первую букву на "г" и получить гергей!
struct NOTE {
char const *name;
char surname[15];
int date_of_birthday[3];
double salary;
};

NOTE structure;
structure.name = "2"; // такое прокатит

Любой строковый литерал является указателем на константную переменную типа char. Строковый литерал, это то что в кавычки заключено. Например "Hello word!" является строковым литералом и он по умолчанию передается как указатель на константную переменную типа char
char const *str = "Hello word!";
Естественно поменять строковый литерал невозможно так как это константный тип.
Если все же есть желание менять само имя (не указатель, указатель то всегда можно поменять на другое имя), то есть из какой нибудь Насти сделать какую нибудь Пасти, нужно скопировать константный литерал в неконстантный массив. Есть например функция strcpy находящаяся в библиотеке cstring которая копирует строку с завершающим нулем из источника в приемник, а потом работайте.
struct NOTE {
char name[10];
char surname[15];
int date_of_birthday[3];
double salary;
};

NOTE structure;
strcpy(structure.name, "2");
**
***артем ***
15 408
Лучший ответ
В C/С++ присваивание массива массиву не работает. Хочешь записать в массив char name[10] константный массив символов (т. е. "2") - используй функцию strcpy.
Никита Другов
Никита Другов
69 775
Видимо name - константа
Андрей Атамановский struct NOTE {
char name[10];
char surname[15];
int date_of_birthday[3];
double salary;
};
Александр Гришин А нет, короче лучше string юзай)

Похожие вопросы