如果我的结构定义如下:
struct image{
unsigned int width, height;
unsigned char *data;
};
此类型的2个变量:
struct image image1;
struct image image2;
我想将数据从image1传输到image2的数据(假设image1有一些数据被写入,而image2有数据用malloc或calloc分配)。怎么做到呢?非常感谢。
答案 0 :(得分:5)
假设struct image
的两个实例指向相同的data
是不可取的,那么memcpy()
不能用于复制structs
。要复制:
data
data
缓冲区分配内存
width
成员memcpy()
data
成员。例如:
struct image* deep_copy_image(const struct image* img)
{
struct image* result = malloc(sizeof(*result));
if (result)
{
/* Assuming 'width' means "number of elements" in 'data'. */
result->width = img->width;
result->data = malloc(img->width);
if (result->data)
{
memcpy(result->data, img->data, result->width);
}
else
{
free(result);
result = NULL;
}
}
return result;
}
答案 1 :(得分:2)
你试过memcpy(& image1,& image2,sizeof(image));
编辑: 为image2.data分配数据 之后,如果数据以空值终止,你必须strcpy(image2.data,image1.data),但如果不是,则使用memcpy和数据大小。
此致 卢卡
答案 2 :(得分:2)
struct image image1;
struct image image2;
...
image2.width = image1.width;
image2.height = image1.height;
/* assuming data size is width*height bytes, and image2.data has enough space allocated: */
memcpy(image2.data, image1.data, width*height);
答案 3 :(得分:1)
在C中很简单。只需执行以下操作(假设image2未初始化):
image2=image1; //there's no deep copy, pointed to memory isn't copied
你可以将一个结构变量分配给另一个,因为它们属于同一类型。不需要复制零食。这是C的有用功能。
之前已经讨论过:
答案 4 :(得分:1)
如果你想要的只是重复结构(即创建一个“浅”副本):
image2 = image1;
如果您还要复制image1.data
指向的数据(“深层复制”),则需要手动执行此操作:
memcpy(image2.data, image1.data, image1.width * image1.height);
(假设数据中有image1.width * image1.height
个字节,并且在malloc()
中有足够的空间image2.data
用于存储它。)