C/C++

Значение типа const char* нельзя присвоить сущности типа char*

Пишу код:
#include <iostream>

using namespace std;

int main()

{

char* a;

a = "тест";

cout << a;

return 0;

}
Выдает ошибку: "Значение типа const char* нельзя присвоить сущности типа char*". В интернете пишут, что должно работать, но не работает (есть решение написать const char* a; и потом тоже самое, но я не знаю к каким последствиям может привести. Да и почему бы ему не работать без const?).
Дунк
Дунк
224
Конструкция:
char* a;
a = "тест";
означает, что можно написать:
a[2] = 'q';
, изменяя константный литерал "тест" - что недопустимо.
Чтобы запретить подобные изменения и нужен const.

Либо переходи на C (без плюсов), либо используй специально предназначенный для строк тип string.
СЕ
Серик Елеугалиев
97 430
Лучший ответ
Дунк Спасибо большое! Сейчас учусь по книге и там вылезают некоторые ошибки в коде
В старом коде, вероятно, char* a = "тест" превращалось в
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 Поэтому совет в комментариях не работал и ошибка осталась.
Olgun Elkansu
Olgun Elkansu
17 671
сразу присваивай значение при объявлении:


char *a="тест";


если хочешь и далее менять значение строке типа char*,
то объявляй сперва массив: char a[15]={0};
а потом обнуляй его перед новым присваиванием: memset(a, '\0', strlen(a) );
и копируй в массив новое значение: strcpy(a, "новое значение");

не забудь в инклуды добавить #include<string.h> и #include<stdlib.h>,
чтобы использовать функции strcpy() и memset()
+++ .....
+++ .....
7 402
Дунк Та же ошибка
Дунк А в чем отличие строки char* и const char*, если по итогу выходит одно и тоже?