Создание массива для хранения массивов символов в C

Мой C сейчас немного ржавый, поэтому я не могу создать что-то, что я считаю достаточно простым.

Позвольте мне сослаться на массивы символов в качестве строк для этого поста. Это прояснит и мне, и вам.

У меня есть массив, который может содержать 1 или более строк. Например, {"ab", "cd", "ef"}. Я хочу сделать еще один массив для хранения нескольких версий массива строк. Так что-то вроде {{"ab", "cd", "ef"}, {"gh", "ij"}, {"kl"}}.

Что у меня сейчас есть:

char *arrayOfStrings[50]; // a single array to hold multiple strings
char **arrayOfArraysOfStrings[10]; // array to hold multiple snapshots of arrayOfStrings

Массив строк изменяется со временем, и я использую массив массивов строк, чтобы в основном хранить исторические снимки arrayOfStrings. Моя проблема возникает, когда мне нужно получить доступ к массиву снимков для данных. Вот код, который я должен поместить в массив снимков:

arrayOfArraysOfStrings[input_index] = arrayOfStrings; // you can assume input_index is updated correctly, I've already checked that.

Это кажется неправильным, поскольку, когда я пытаюсь получить доступ к содержимому массива снимков и распечатать его, он выводит информацию только из самых последних массивов arrayOfStrings. Идея, которую я искал, заключалась в том, чтобы сохранить адрес, на который указывает arrayOfChars, в записи массива снимков, чтобы я мог получить к нему доступ позже.

Прямо сейчас доступ к записи в массиве снимков осуществляется следующим образом:

arrayOfArraysOfChars[historicalIndex][indexOfTargetChar]

Есть несколько вопросов, на которые я хочу ответить:

Является ли метод, который я описал, подходящим для того, что я пытаюсь сделать, или в моей общей логике есть недостаток?Что я делаю не так с моим текущим кодом и как я могу это исправить?Есть ли лучший способ сделать это, и если да, то как работает инициализация массивов, добавление к массивам и чтение из массивов?

--edit 4 / 18-- Отчасти проблема в том, что я устанавливаю указатели в arrayOfArraysOfStrings, чтобы они указывали на то же, на что указывает arrayOfStrings. Это плохо, так как arrayOfStrings редактируется. Мне нужен какой-то способ дублировать двумерный массив ... Желательно просто выделить новый блок памяти, на который указывают arrayOfStrings.

Ответы на вопрос(5)

Ваш ответ на вопрос