Моят 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 се редактира. Имам нужда от някакъв начин да дублирам 2D масив... За предпочитане чрез просто разпределяне на нов блок памет, към който да сочи arrayOfStrings.