Обычно это не проблема, но есть вещи, на которые стоит обратить внимание. Обычно это вопрос правильности, что означает отслеживание того, что вы можете изменить, а что нет.
Если вы возвращаете строку в двойных кавычках, это const char *
, и обращение с ней, как с чем-либо еще, является приглашением к неприятностям. Изменение такой строки является неопределенным поведением, но обычно приводит к сбою программы или изменению этой строки, где бы она ни упоминалась.
Если вы вернете массив символов в стеке (то есть, локальную переменную вызываемой функции), он исчезнет, и указатель не будет указывать ни на что конкретно, возможно, с плохими результатами в какой-то момент.
Если вызываемая функция возвращает что-то, что уже const char *
, то для изменения на char *
требуется приведение. Кроме того, если вы на самом деле собираетесь изменить это, вы должны быть уверены, что это можно изменить. Обычно гораздо лучше сохранить его как const char *
.
Нет немедленной проблемы с возвратом памяти, выделенной с помощью malloc()
или new
, но у вас есть проблема с владением: какая функция должна free()
/ delete
, когда и что вы делаете с возможной копии? Вот где светятся умные указатели C ++.