Как заменить символ в указателе на строку char*?

211
02 апреля 2017, 04:46

Хочу сделать изменение любого выбранного символа в массиве через указатели.

char *str = "Hello";
*static_cast<char*>( (str + sizeof(char) * 1) ) = 'K';

Но ничего не выходит, как можно такое реализовать? и вообще можно ли? Суть в том чтобы указать на нужный символ, найти его адрес в памяти и по этому адресу заменить значение.

Answer 1

В C++ (в отличии от C) строковые литералы имеют тип константных символьных массивов. Поэтому правильно будет написать

const char *str = "Hello";

И в C++, и в C любая попытка изменить строковый литерал ведет к неопределенному поведению программы.

Вы могли бы определить символьный массив, инициализировав его строковым литералом. Например,

char str[] = "Hello";

Тогда бы вы могли написать просто

*( str + 1 ) = 'K';

Не имеет смысла использовать приведение типов static_cast<char *>, так как выражение str + sizeof(char) * 1 уже имеет тип char * и эквивалентно выражению str + 1.

Выражение sizeof(char) всегда равно 1.

READ ALSO
Программное оформление html кода

Программное оформление html кода

Программно получаю строки (c++, std::string) с неоформленным html кодом, можно ли как-то строки программно обрабатывать и придавать html коду оформление,...

229
Помогите с программой на Си++

Помогите с программой на Си++

Нашел программу для выполнения задачи размещения без перестановки, но не могу понять, как работает сам алгоритм, можете объяснить ?

189
Как добавить pkgconfig в CMakeLists.txt

Как добавить pkgconfig в CMakeLists.txt

Хочу заменить часть скриптов на Python более быстрыми аналогами на C++В первую очередь интересует SAX парсеры из libxml++-3

193