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