Инициализация динамически распределенного массива const char из массива const char

Я пытаюсь написать код, который будет присваивать массив const char динамически распределенному массиву const char. Я пытался сделать это как

const char staticArray[4] = "abc";
const char * ptrDynamicArray;
ptrDynamicArray = new const char[4](staticArray);

Но я получаю сообщение об ошибке ("инициализатор в скобках в массиве new [-fpermissive]").

У меня есть два вопроса:

  1. Как я могу решить это - как выключить (я использую Code::Blocks 16.01)?

  2. Могу ли я инициализировать динамически размещенный массив 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];
Другие вопросы по тегам