У меня есть следующая функция, которая изначально выполняет некоторую проверку параметров функции.C++ const char * to char *
char *doSomething(const char* first, const char* second) {
if((first == nullptr || *first == '\0') && (second == nullptr || *second == '\0')) {
return nullptr;
} else if (first == nullptr || *first == '\0') {
return (char *) second;
} else if (second == nullptr || *second == '\0') {
return (char *) first;
}
//doSomething
}
ли отливку параметр функции возвращает новый char*
, который указывает на другую область памяти? Я не хочу, чтобы кто-то использовал эту функцию для управления значением, на которое указывают постоянные параметры. Я хотел бы, чтобы новый char*
был возвращен с тем же значением, что и один из параметров, если он равен nullptr
или пуст.
Последующие действия: Будет ли здесь булева переменная лучше? Я понимаю, что я выполняю одну и ту же проверку для каждой переменной дважды, но я бы не использовал этот логический код в другом месте кода этой функции.
И затем я называю 'doSomething (« привет »,« мир! ») [0] = 'X';' и стрела! SIGSEGV. (ответ «нет», вам придется «strncpy()» эти строки. – YSC
Если вы не хотите, чтобы кто-то, использующий эту функцию, манипулировал значением, которое константные параметры указывают на return by 'const char *', или return _by value_. Функция выполняет неявное преобразование 'const_cast'. – Ziezi
Вы хотите, чтобы вы вернули изменчивую копию строки? В противном случае, почему бы вам просто не возвратить' const char * '? – rici