Как это:
// allocate memory for n char pointers dynamically.
char ** lit = static_cast<char**>(::operator new(n * sizeof(char*)));
for (unsigned int i = 0; i != n; ++i)
{
lit[i] = static_cast<char*>(::operator new(length_of_string_i)); // #1
// populate lit[i] with data
}
Вам нужен какой-то метод определения длины i
-ой строки, который нужно правильно вставить в строку, помеченную # 1. Обратите внимание, что sizeof(char) == 1
, поэтому вам не нужно ничего умножать во внутреннем распределении.
(Вы можете использовать std::malloc
вместо ::operator new
, если хотите, но тогда вам нужно #include <cstdlib>
.) Не забудьте очистить, когда вы закончите!
Это, конечно, только буквальный перевод того, что вы просили. В C ++ вы обычно предпочитаете создание объекта вместо необработанного выделение памяти , которое выглядит так:
// construct n char pointers dynamically
char ** lit = new char*[n];
for (unsigned int i = 0; i != n; ++i)
{
lit[i] = new char[length_of_string_i];
// populate lit[i] with data
}
Но вам никогда не следует серьезно использовать новый массив. Это не очень хорошая концепция и редко хороший C ++.
Итак, вам вообще не следует этого делать, и вместо этого вы должны использовать:
std::vector<std::string> lit(n);