copier des données à partir d'une structure à l'autre en C
Si j'ai une structure définie comme:
struct image{
unsigned int width, height;
unsigned char *data;
};
Et 2 variables de ce type:
struct image image1;
struct image image2;
Je veux transférer les données à partir image1 les données de image2(en supposant image1 certaines données écrites, et image2 dispose de données alloué avec malloc ou calloc). Comment peut-il être fait? Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
Si tout ce que vous voulez est de dupliquer la structure (j'. e. la création d'un "superficielle" copie):
si vous aussi vous souhaitez copier les données pointé par
image1.data
("deep copy"), alors vous avez besoin de le faire manuellement:(en supposant qu'il
image1.width * image1.height
octets de données, et il y a assez d'espacemalloc()
auf s i indiqué dansimage2.data
pour le stockage que.)image2.data
sera point àimage1.data
qui n'est pas correct. Chaque membre doit être copiés séparément.data
membre deimage2
de "fuites".En supposant qu'il n'est pas souhaitable que les deux instances de
struct image
sont pointant vers la mêmedata
puismemcpy()
ne peut pas être utilisé pour copier lesstructs
. Copier:data
tampon en fonction de la sourcedata
width
membresmemcpy()
data
membres.Par exemple:
height
membre.result->height
, faute de frappe?avez-vous essayez de memcpy(&image1,&image2,sizeof(image));
edit:
Alocate de données pour image2.données
après que vous avez à strcpy(image2.de données,image1.de données) si les données est null, mais si ses pas, puis utilisez memcpy avec la taille des données.
Ce qui concerne,
Luka
struct image
de sorte quesizeof
lèvera une erreur.C'est simple en C. tout Simplement le suivant(en supposant image2 est non initialisée):
Vous pouvez affecter une variable de structure à l'autre étant donné qu'ils sont du même type.Pas besoin de copier la pièce repas.Cette fonctionnalité est utile de C.
Ce qui a été discuté avant :
Attribuer une structure à l'autre en C
data
membre deimage2
. Si vous supposez queimage2
est effectivement non initialisée avant cette affectation, il sera important de le préciser explicitement.allocate copies of pointer members that own memory, copy addresses of pointer members that don't own memory
.data
serait tout simplement impliquerimage2.data = image1.data;
. Siimage2.data
avait déjà attiré l'attention sur malloced de données, ce serait une fuite. Une copie en profondeur pourrait impliquer quelque chose commefree(image2.data); image2.data = malloc(image1.width * image1.height); memcpy(image2.data, image1.data, image1.width * image1.height);