在C中将数据从一个结构复制到另一个结构

时间:2013-05-03 14:03:47

标签: c structure memcpy

如果我的结构定义如下:

struct image{
unsigned int width, height;
unsigned char *data;
};

此类型的2个变量:

struct image image1;
struct image image2;

我想将数据从image1传输到image2的数据(假设image1有一些数据被写入,而image2有数据用malloc或calloc分配)。怎么做到呢?非常感谢。

5 个答案:

答案 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的有用功能。

之前已经讨论过:

Assign one struct to another in C

答案 4 :(得分:1)

如果你想要的只是重复结构(即创建一个“浅”副本):

image2 = image1;

如果您还要复制image1.data指向的数据(“深层复制”),则需要手动执行此操作:

memcpy(image2.data, image1.data, image1.width * image1.height);

(假设数据中有image1.width * image1.height个字节,并且在malloc()中有足够的空间image2.data用于存储它。)