Удалить постоянство из переменной

я пытаюсь удалить константу из переменной (char *), но по какой-то причине, когда я пытаюсь изменить значение, исходное значение константной переменной остается прежним.

 const char* str1 = "david";
char* str2 = const_cast<char *> (str1);
str2 = "tna";

теперь значение str2 меняется, но первоначальное значение str1 остается прежним, я посмотрел его в Google, но не смог найти четкого ответа.

при использовании const_cast и изменении значения должен ли также изменяться оригинал переменной const?

9

Решение

Тип str1 является const char*, Это char то есть const, а не указатель. То есть это указатель на const char, Это означает, что вы не можете сделать это:

str1[0] = 't';

Это изменит значение одного из const chars.

Теперь, что вы делаете, когда вы делаете str2 = "tna"; меняет значение указателя. Все в порядке. Ты просто меняешься str2 указать на другой строковый литерал. Сейчас str1 а также str2 указывают на разные строки.

С вашим неconst указатель str2, вы мог делать str2[0] = 't'; — однако, у вас будет неопределенное поведение. Вы не можете изменить то, что было первоначально объявлено const, В частности, строковые литералы хранятся в постоянной памяти, и попытка их изменить принесет вам ужасную неудачу.

Если вы хотите взять строковый литерал и безопасно его изменить, инициализируйте массив с этим:

char str1[] = "david";

Это скопирует символы из строкового литерала в char массив. Тогда вы можете изменить их по своему вкусу.

10

Другие решения

str2 это просто указатель. А ваш код просто меняет значение указателя, адреса, а не строки, на которую он указывает.

Более того, то, что вы пытаетесь сделать, приводит к неопределенное поведение, и, скорее всего, приведет к ошибкам во время выполнения. Все современные компиляторы будут хранить вашу строку "david" в постоянной памяти Попытки изменить эту память приведут к ошибкам защиты памяти.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector