Hier kopiere ich ja die Adressen, warum geht das nicht? Da müsste ich wenigstens nicht die kompletten Daten kopieren.
Hi Mark,
in diesem Ansatz hast Du auch einen grundsätzlichen Denkfehler. Es besteht ein Unterschied zwischen Zeigern, die auf einen fest allokierten Speicherbereich zeigen und Zeigern, die (quasi) frei beweglich sind. Mit der Deklaration eines Arrays aus Strukturelementen allokierst Du einen Buffer, der an einer bestimmten Stelle im Speicher liegt. Über die Indizes Deines Arrays und die Sturkturelemente kannst Du auf ganz bestimmte Stellen in diesem Buffer zugreifen.
Da in C jedes Array durch einen Zeiger auf sein erstes Element gekennzeichnet ist, kannst Du theoretisch so einen Zeiger auch verschieben (der C-Compiler erlaubt eine Menge, was nicht sinnvoll ist...), aber Du solltest es tunlichst vermeiden, denn das widerpricht dem Sinn und und Zweck dieses Zeigers. Einer der frei beweglich sein soll, sollte auch so deklariert sein, also nur als Zeiger, ohne Datenbereich "dahinter".
Prinzipiell ist natürlich eine Lösung nach Deiner Idee möglich, bei der lediglich die Adressen der Strings kopiert werden. Dann brauchst Du aber eine Struktur, die schon durch die Deklaration lediglich Zeiger enthält - und den Buffer mit den ganzen Daten (oder einzelne, kleinere Buffer) musst Du Dir zusätzlich anders erzeugen. In der Tat wird man in einem Buffer meist nicht die Daten hin und her kopieren, sondern den Zugriff auf die Elemente anders organisieren. Die Frage ist halt, wie bei der tatsächlichen Anwendung am sinnvollsten (und auch am verständlichsten) erscheint.
Grüsse
Stefanie