Пишу код:
#include <iostream>
using namespace std;
int main()
{
char* a;
a = "тест";
cout << a;
return 0;
}
Выдает ошибку: "Значение типа const char* нельзя присвоить сущности типа char*". В интернете пишут, что должно работать, но не работает (есть решение написать const char* a; и потом тоже самое, но я не знаю к каким последствиям может привести. Да и почему бы ему не работать без const?).
C/C++
Значение типа const char* нельзя присвоить сущности типа char*
Конструкция:
char* a;
a = "тест";
означает, что можно написать:
a[2] = 'q';
, изменяя константный литерал "тест" - что недопустимо.
Чтобы запретить подобные изменения и нужен const.
Либо переходи на C (без плюсов), либо используй специально предназначенный для строк тип string.
char* a;
a = "тест";
означает, что можно написать:
a[2] = 'q';
, изменяя константный литерал "тест" - что недопустимо.
Чтобы запретить подобные изменения и нужен const.
Либо переходи на C (без плюсов), либо используй специально предназначенный для строк тип string.
Дунк
Спасибо большое! Сейчас учусь по книге и там вылезают некоторые ошибки в коде
В старом коде, вероятно, char* a = "тест" превращалось в
char* a = new char [strlen("тест")+1] {"тест"}; А удалять забывали, текст же... После чего тонны неудаленных строк витали по просторам ОЗУ. Вот и решили зарубать на корню, а взамен дали стринги.
char* a = new char [strlen("тест")+1] {"тест"}; А удалять забывали, текст же... После чего тонны неудаленных строк витали по просторам ОЗУ. Вот и решили зарубать на корню, а взамен дали стринги.
Начиная с С++11 неявное преобразование теперь недоступно.
В интернете полно информации по этому поводу.
https://stackoverflow.com/questions/20944784/why-is-conversion-from-string-constant-to-char-valid-in-c-but-invalid-in-c
Я бы не советовал подстраиваться под учебник. Изучи проблему, запомни, и делай согласно новым стандартам.
P.s. Просто добавление Сшных заголовочных файлов не меняет тип с С++ на С. Ты можешь подключать что-угодно. Чтобы MSVC начал компилировать его как С нужно изменить расширение файла на .c Поэтому совет в комментариях не работал и ошибка осталась.
В интернете полно информации по этому поводу.
https://stackoverflow.com/questions/20944784/why-is-conversion-from-string-constant-to-char-valid-in-c-but-invalid-in-c
Я бы не советовал подстраиваться под учебник. Изучи проблему, запомни, и делай согласно новым стандартам.
P.s. Просто добавление Сшных заголовочных файлов не меняет тип с С++ на С. Ты можешь подключать что-угодно. Чтобы MSVC начал компилировать его как С нужно изменить расширение файла на .c Поэтому совет в комментариях не работал и ошибка осталась.
сразу присваивай значение при объявлении:
char *a="тест";
если хочешь и далее менять значение строке типа char*,
то объявляй сперва массив: char a[15]={0};
а потом обнуляй его перед новым присваиванием: memset(a, '\0', strlen(a) );
и копируй в массив новое значение: strcpy(a, "новое значение");
не забудь в инклуды добавить #include<string.h> и #include<stdlib.h>,
чтобы использовать функции strcpy() и memset()
char *a="тест";
если хочешь и далее менять значение строке типа char*,
то объявляй сперва массив: char a[15]={0};
а потом обнуляй его перед новым присваиванием: memset(a, '\0', strlen(a) );
и копируй в массив новое значение: strcpy(a, "новое значение");
не забудь в инклуды добавить #include<string.h> и #include<stdlib.h>,
чтобы использовать функции strcpy() и memset()
Похожие вопросы
- (Ошибка) аргумент типа "const char *" несовместим с параметром типа "char *"
- Ошибка C2664: невозможно преобразовать аргумент 1 из "const char [6]" в "char *" в C ++
- Сравнение элементов массива типа char с символом типа char
- Список с элементами типа char.
- Навыков программного обработки строк типа char *
- Различие указателей int *; и char *;
- Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
- Как конвертировать Char или Tchar или wchar_t в LPWSTR?
- Чему равно значение переменной, если ей присвоено значение, возвращенное функцией, которая ничего не возвращает? (+)
- Что означает char* str и какие у нее особенности?