Когда я пытаюсь преобразовать const char*
в char*
, происходит сбой:
int myfunc(const char*);
const char * str = "test";
myfunc( (char*)str ) // crash
Как я могу это сделать?
Когда я пытаюсь преобразовать const char*
в char*
, происходит сбой:
int myfunc(const char*);
const char * str = "test";
myfunc( (char*)str ) // crash
Как я могу это сделать?
Обновить
Попытка изменить строковый литерал является неопределенным поведением. Если мы посмотрим на проект стандарта C++ раздел 2.14.5
Строковые литералы параграф 12 гласит:
Являются ли все строковые литералы различными (т. е. хранятся в непересекающихся объектах), определяется реализацией. Эффект от попытки изменить строковый литерал не определен.
Сбой является одним из многих возможных результатов неопределенного поведения. Также возможно, что программа работает правильно.
В качестве альтернативы вы можете создать автоматический массив следующим образом:
char str[] = "test" ;
который будет иметь копию строкового литерала, которую вы затем сможете изменить.
Исходный
Если myfunc
изменяет строковый литерал, то у вас неопределенное поведение, которое может легко привести к сбою вашей программы.
То, что вы делаете, является неопределенным поведением.
Вам не разрешено изменять память, на которую указывает str
. Если вам нужен тот, который вы можете изменить, объявите его следующим образом:
char str[] = "test";
Это создаст для вас изменяемую копию строкового литерала "test"
.
myfunc
изменяет свой аргумент? - person Shafik Yaghmour   schedule 15.04.2013const char*
. - person juanchopanza   schedule 15.04.2013