Kopieren des Inhalts einer Struktur
-
Hi Leute,
ich habe ein Problem. Es würde mich freuen, wenn jemand mir helfen könnte.
aa und bb sind zwei Strukturen und aa beinhaltet ein Objekt von Type bb. d.h es geht hier um Struktur in Struktur!!!!
Ich habe ein Objekt o1 vom Type aa und möchte kompletten Inhalt dieser Objekt zu o2 kopieren.
mit dem Befehl memcpy(o2,o1,sizeof(aa)) :Bei dem Fall: Wenn Inhalt von o1 gelöscht oder geändert wird, wird auch Inhalt von o2 geändert.
Denn nach dem Befehl memcpy() Objektzeiger o2 zeigen auf die Adressen von o1.
Ich habe dieses Problem wie folgendes gelöst.
Jedes Element wird einzeln kopiert. Diese lösung nicht effizient, da meine richtige Strukturen noch kompliziert sind.Jetzt mein Frage :
Gibt`s noch einfache,effiziente Möglichkeit, Inhalt einer Struktur (Struktur in Struktur )auszutauschen.#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>typedef struct _bb
{
int *b1;
int b2;
}bb;typedef struct _aa
{
char *a1;
int a2[2];
bb *aa_bb;
}aa;int main(void)
{aa *o3, *o2, *o1;
o1 = (aa*)malloc(sizeof(aa));
o1->aa_bb = (bb*)malloc(sizeof(bb));
o1->aa_bb->b1 = (int*)malloc(sizeof(int)*2);o1->a1="struktur o1";
o1->a2[0]=12;
o1->a2[1]=13;
o1->aa_bb->b1[0]=14;
o1->aa_bb->b1[1]=15;
o1->aa_bb->b2=2;o2=(aa*)malloc(sizeof(aa));
o2->a1=(char*)malloc(strlen(o1->a1)+1);
//o2->a2=(int*)malloc(sizeof(int)2);
o2->aa_bb = (bb)malloc(sizeof(bb));
o2->aa_bb->b1=(int*)malloc(sizeof(o1->aa_bb->b1));o2->aa_bb->b2 = o1->aa_bb->b2;
memcpy(o2->aa_bb->b1,o1->aa_bb->b1,
sizeof(o1->aa_bb->b1));
memcpy(o2->a2,o1->a2,sizeof(o1->a2));
strcpy(o2->a1,o1->a1);memcpy(o3,o1,sizeof(o1));
free(o1);
// Inhalt von o3 wurde auch gelöscht, aber Ihalt von
// o2 nicht.return 0;
}