Вместо указателя на массив вы должны сделать указатель на указатель, который будет заполнен массивом указателей, каждый элемент которого, в свою очередь, будет заполнен массивом символов:
char ** c = new char*[n]; // array of pointers, c points to first element
for (unsigned int i = 0; i != n; ++i)
c[i] = new char[get_size_of_array(i)]; // array of chars, c[i] points to 1st element
Несколько более C ++ структура данных будет std::vector<std::string>
.
Как вы заметили в комментарии, динамические массивы, выделенные с помощью new[]
, не могут быть изменены, поскольку в C ++ нет аналога realloc
(это не имеет смысла для объектной модели, если вы об этом думаете) , Поэтому вы всегда должны отдавать предпочтение правильному контейнеру по сравнению с любой ручной попыткой динамического управления временем жизни.
В итоге: не используйте new
. Когда-либо. Используйте соответствующие динамические контейнеры.