В настоящее время мой 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]
Есть несколько вопросов, на которые я хочу ответить:
- Я полагаю, что метод, который я изложил, подходит для того, что я пытаюсь сделать, или есть недостаток в моей общей логике?
- Что я делаю неправильно с моим текущим кодом и как его исправить?
- Есть ли лучший способ сделать это, и если да, то как работает инициализация массивов, добавление массивов и чтение из массивов?
- редактировать 4/18-- Отчасти проблема заключается в том, что я устанавливаю указатели в arrayOfArraysOfStrings, чтобы указать на то же, что указывает на arrayOfStrings. Это плохо, поскольку arrayOfStrings редактируется. Мне нужно каким-то образом дублировать 2D-массив... Предпочтительно, просто выделив новый блок памяти для arrayOfStrings, чтобы указать.