Приведение const char * to char * падает

Когда я пытаюсь сыграть const char* в char* он падает:

int myfunc(const char*);
const char * str = "test";
myfunc( (char*)str ) // crash

Как я могу это сделать?

2

Решение

Обновить

Попытка изменить строковый литерал является неопределенное поведение. Если мы посмотрим на проект стандарта C ++ раздел 2.14.5 Строковые литералы параграф 12 говорит:

Все ли строковые литералы различны (т.е. хранятся в неперекрывающихся объектах), определяется реализацией. Эффект попытки изменить строковый литерал не определен.

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

В качестве альтернативы вы можете создать автоматический массив следующим образом:

char str[] = "test" ;

который будет иметь копию строковый литерал который вы можете изменить.

оригинал

Если myfunc модифицирует строковый литерал, тогда у вас есть неопределенное поведение, которое может легко привести к сбою вашей программы.

3

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

То, что вы делаете, это неопределенное поведение.

Вам не разрешено изменять память, на которую указывает str, Если вам нужен тот, который вы можете изменить, объявите его следующим образом:

char str[] = "test";

Это создаст изменчивую копию строкового литерала "test" для тебя.

4

По вопросам рекламы [email protected]