Инициализация динамически распределенного массива const char из массива const char
Я пытаюсь написать код, который будет присваивать массив const char динамически распределенному массиву const char. Я пытался сделать это как
const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new const char[4](staticArray);
Но я получаю сообщение об ошибке ("инициализатор в скобках в массиве new [-fpermissive]").
У меня есть два вопроса:
Как я могу решить это - как выключить (я использую Code::Blocks 16.01)?
Могу ли я инициализировать динамически размещенный массив const char как-нибудь еще?
1 ответ
Вы не можете копировать-инициализировать массив из другого массива напрямую, отсюда и ошибка. Вам либо нужно вручную скопировать элементы (или использовать std::copy
) или, лучше, если вы хотите использовать массив с возможностью копирования std::array<char, 4>
вместо.
Но, как уже упоминалось в комментариях, лучше всего использовать std::string
здесь, и используйте его std::string::c_str()
функция-член в случае, если вам нужно обойти const char*
указатели на старые C-подобные интерфейсы.
Перегрузка нового оператора сделает вашу работу.
void * operator new[](size_t n, const char *s) {
void *p = malloc(n);
strcpy((char *)p, s);
return p;
}
Теперь новый оператор можно вызывать так:
const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new (staticArray) char[4];