
Другие языки программирования и технологии
[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");
Первый при котором то что находится в 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");
В C/С++ присваивание массива массиву не работает. Хочешь записать в массив char name[10] константный массив символов (т. е. "2") - используй функцию strcpy.
Видимо name - константа
Похожие вопросы
- Дан двумерный массив C(m,n). Найти произведение элементов, больших среднего значения. Помогите пожалуйста!!!
- Дан двумерный массив C(m,n). Найти произведение элементов, больших среднего значения. Помогите пожалуйста!!! На паскале
- Помогите решить задачу C++. Найти номер строки, для которой среднее арифметическое значение ее элементов максимальна
- Помогите, задали сделать любую программу на C++ Оно должно быть не простенькое, а то ниже 2 не поставит
- (Borland C++) Неизвестно откуда берет значение. Помогите, кто знает. Заранее спасибо!
- Информатика."Найти значение логических выражений".Очень нужна ваша помощь!
- Требуется выражение C++ подскажите, что не так.
- Почему при вводе маленьких значений коэффициентов программа на c++ не работает
- C#. Элементы одномерного массива размером 7, которые больше среднего значения элементов массива, заменить на 0.
- Поиск значения в векторе с помощью std::find C++
char name[10];
char surname[15];
int date_of_birthday[3];
double salary;
};