Я пытаюсь работать с массивом указателей на символы.
Допустим, я динамически объявляю такой массив следующим образом:
int numrows=100;
char** array = new char*[numrows];
А затем я заполняю его с помощью getline, чтобы получить строки изфайл, преобразовывающий строки в массивы char, затем устанавливающий указатель в моем массиве так, чтобы он указывал на указанный массив char следующим образом:
string entry;
int i=0;
while (getline(file,entry)){
char* cstring = new char[entry.length()];
array[i]=strncpy(cstring,entry.c_str(),entry.length());
free(cstring);
i++;
}
(это работает, но есть ли лучший способ сделать это?)
Проблема в том, что я не знаю, как вырастить массив, когда я стану больше, чем числа.Я знаю, как сделать это для одномерного массива, но двумерность отталкивает меня.
Я думаю, что смогу увеличить его так же, как вы вырастите одномерный массив, верно?
if (i==numrows){
char** temp = new char*[numrows+numrows];
for (int j=0;j<i;j++){
char* cstring = new char[strlen(array[i])];
temp[i]=strncpy(cstrin,array[i],strlen(array[i]));
free(cstring);
}
delete [] array;
array = temp;
}
Так что, если текущий массив заполнится, сделайте секундумассив, который в два раза больше текущего массива и заполнить его содержимым текущего массива.Затем удалите массив и дайте массиву указывать на темп.Я в порядке до создания нового массива.Я могу получить содержимое массива в temp, но когда я удаляю массив и устанавливаю array = temp, содержимое массива не является содержимым temp.
Так что мой вопрос в том, как я могу / должен расти этот динамический массив указателей на символы?