Когда я пытаюсь сыграть 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"
для тебя.