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

Ошибка: значение типа «const char*» нельзя присвоить сущности типа «char*»

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка «значение типа «const char [81]» нельзя использовать для инициализации сущности типа «const unsigned char [61]»
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once.

Ошибка: значение типа «const char *» нельзя использовать для инициализации сущности типа «char *» (строка 8)
#include using namespace std; int main() < int number = 0; char *result; char.

Первый вариант корректный. Второй вариант будет работать только тогда, когда не будет записи по указателю «s». А если записей не будет, то лучше не мучаться и сразу написать как в первом варианте

Добавлено через 1 минуту
Почему запись по такому указателю вызовет проблемы, см. тут: https://www.cyberforum.ru/blogs/18334/blog97.html

Значение типа «const char» нельзя присвоить сущности типа «char*»
Добрый день. Разбираю классы и столкнулся вот с чем. В одной версии visual studio данный код.

Значение типа «const char *» нельзя использовать для инициализации сущности «char*»
Книга Пратта, Лекции и Упражнения. 750 страница, листинг 14.8. В объявлении производного класса.

Значение типа «char *» нельзя присвоить сущности типа «LPWSTR»
значение типа «char *» нельзя присвоить сущности типа «LPWSTR» void AddColToListView(char.

Значение типа «char *» нельзя присвоить сущности типа «LPWSTR»
как исправить эту ошибку значение типа «char *» нельзя присвоить сущности типа «LPWSTR»

Источник

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

Добрый день. Я новичок в c++ и столкнулся с проблемой при написании маленькой программы. Собственно у меня такая ошибка: значение типа «const char *» нельзя присвоить сущности типа «char *»

Я работаю с файлом для чтения данных из ini файла, он выглядит так:

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка E0167 аргумент типа «unsigned char *» несовместим с параметром типа «const char *»
Всем привет, подскажите пожалуйста, в проекте MS Visual Studio 2017 напротив строчки.

n1lsik, у структуры People нет мембера с названием szCustomName, полагаю имеется ввиду name?

что есть Vasya? почему в одном случае вы его используете как int, а в другом как указатель на строку?

Из того что я вижу, вы сильно себе облегчите жизнь, если People::name объявите как std::string name.

Читайте также:  сколько нельзя кушать после прокола языка

Решение

Есть. Если обязательно нужно использовать char*, то:

(1) создать динамическую память под копию строки, которая будет храниться внутри структуры, так как ыы не можете сохранить использовать указатель на временный объект, который возвращается из ReadString(). Использовать для этого можно, например, strdup();
(2) удалять выделенную динамическую память, под name, когда она уже не нужна, например в People::

People();
(3) объявить конструктор для структуры;
(4) внимательно отнестись к операциям копирования данной структуры.

Источник

Присваивание символа const char *

Добрый день, хочу расставить точки над «i» для себя.

Вопрос в следующем. Почему, когда мы const char * присваиваем строку, он присваивает, а символ — нет? Может, где-то для const char * перегружен оператор присваивания, и он ему присваивает новый адрес? А при присваивании литерала мы пытаемся записать по тому же адресу?

3 ответа 3

Вопрос в следующем. Почему, когда мы const char * присваиваем строку, он присваивает, а символ — нет?

Нужно различать константный указатель и указатель на константу.

1) Указатель на константу: нельзя менять содержимое объекта, на который указывает указатель, но можно менять содержимое самого указателя (указатель — это переменная, содержащая адрес другой переменной).

2) Константный указатель: можно менять содержимое объекта, но нельзя менять значение самого указателя. Проще говоря, указатель нельзя переназначить на другой объект, но сам указатель поменять можно.

3) Константный указатель на константу: совокупность первых двух.

После присваивания const char *c = «123»; в c храниться некий адрес, по которому размещена строка «123». Компилятор обычно размещает ее в памяти, которая «read only» (записать то можно туда, просто операционная система знает, что это неправильно и пресекает попытки записи). Но так как использовать будет только для чтения, то все нормально.

Строка c[2] = ‘5’; пытается записать в эту неизменяемую память. Память только для чтения.

Почему так сделано? для оптимизаций и упрощения. Пусть в Вашей программе есть ещё десять мест, где есть константа «123». Компилятор не будет создавать 11 копий, а будет использовать один и тот же адрес. А теперь представьте, что вышеуказанное изменение разрешено:).

Старые компиляторы этого не делали и часто наблюдались интересные спецэффекты, когда константы изменяли свое значение.

Но компилятор может поступить и по другому.

Читайте также:  если паук поднимается вверх к чему это примета

в этом случае может даже выбросить переменную test, а ее значение вывести непосредственно.

Учебник по программированию на С++ говорит, что:

Официальный тип строковых литералов, таких как «Привет»,- const char []. Строка «Привет» имеет тип const char [7]. Секундочку! Ведь в слове Привет шесть букв, а не семь! Не переживайте, ошибки здесь нет. Дополнительный элемент содержит завершающий пустой символ, ‘ \0’ (значение 0), который сообщает компьютеру длину строки. В конце каждого строкового литерала есть скрытый пустой символ (\0), который позволяет алгоритмам определять длину строки и факт достижения конца строки. Длина строки нужна не всем алгоритмам, но большинству из них. Присвоить строковый литерал переменной типа char* можно следующим образом:

Однако со значением, на которое указывает х, нельзя работать. Если оно не будет постоянным, возникнет ошибка, как в следующем примере:

Этот код вызывает ошибку, потому что нельзя изменять значение константы. Чтобы получить строку, которую можно изменять, следует присвоить строковый литерал строковому объекту или символьному массиву. Пример объявления символьного массива, элементы которого могут изменяться:

С этим кодом все в порядке, а новым значением строки будет «Тривет». Многие из стандартных библиотечных функций С принимают в качестве одного из аргументов значение типа char*. Однако если строка хранится в виде указателя на символ, ее длина не может быть определена, как в случае строковых литералов, завершаемых пустым символом. В отсутствие пустого символа невозможно понять, где кончается строка.

Источник

Как исправить ошибку: Значение типа «const char *» нельзя присвоить сущности типа «char *»?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка «значение типа «const char [81]» нельзя использовать для инициализации сущности типа «const unsigned char [61]»
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once.

Значение типа «const char» нельзя присвоить сущности типа «char*»
Добрый день. Разбираю классы и столкнулся вот с чем. В одной версии visual studio данный код.

Ошибка: значение типа «const char *» нельзя использовать для инициализации сущности типа «char *» (строка 8)
#include using namespace std; int main() < int number = 0; char *result; char.

Значение типа «const char *» нельзя использовать для инициализации сущности «char*»
Книга Пратта, Лекции и Упражнения. 750 страница, листинг 14.8. В объявлении производного класса.

Читайте также:  гадание на совместимость по цифрам

Значение типа «char *» нельзя присвоить сущности типа «LPWSTR»
значение типа «char *» нельзя присвоить сущности типа «LPWSTR» void AddColToListView(char.

Значение типа «char *» нельзя присвоить сущности типа «LPWSTR»
как исправить эту ошибку значение типа «char *» нельзя присвоить сущности типа «LPWSTR»

Источник

Из «const char» в «const char *»

error C2664: «int atoi(const char *)»: невозможно преобразовать аргумент 1 из «const char» в «const char *»

Честно говоря, не представляю, что это значит.

Подаваемая строка должна содержать фрагмент типа , то есть нужно извлечь число и передать его в int counter

До этого был такой вариант

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Ошибка «значение типа «const char [81]» нельзя использовать для инициализации сущности типа «const unsigned char [61]»
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once.

Значение типа «const char *» нельзя использовать для инициализации сущности «char*»
Книга Пратта, Лекции и Упражнения. 750 страница, листинг 14.8. В объявлении производного класса.

Одновременно отправили. Ок, сейчас попробую

Добавлено через 9 минут
Все равно не клеится.
Как из 1 элемента строки (string, не char[]) сделать const char*, которого требует atoi?
Мне вообще не принципиально, можно не atoi, если есть другие варианты. Единственное, что нужно сделать, это перевести элемент строки в int

(Не знаю, за что было удалено мое сообщение)

Нет, никакого отношения к «последним версиям» это не имеет. В языке С++ всегда можно было инициализировать const-объекты чем угодно: как значениями времени компиляции, так и значениями времени выполнения. Компилятор при это обязан посмотреть внимательно на инициализатор и сделать вывод (по четко оговоренным в стандарте правилам), является ли эта константа константой времени компиляции или константой времени выполнения.

В зависимости от того, к какому классу будет отнесена эта константа, будут накладываться ограничения на ее использование. Например, размер массива в С++ разрешается задавать только константой времени компиляции.

Т.е. никто вам не запрещает и никогда не запрещал в языке С++ написать так

Но константой времени компиляции ‘rc’, разумеется, не станет и case-label с такой константой сделать не получится

Источник

Портал про кино и шоу-биз