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

标签 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 分配了数据)。如何做呢?非常感谢。

最佳答案

假设 struct image 的两个实例指向相同的 data 是不可取的,那么 memcpy() 不能用于复制结构。复制:

  • 为目标结构分配内存
  • 根据源 data 为目标 data 缓冲区分配内存
  • 分配宽度个成员
  • 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;
}

关于在C中将数据从一个结构复制到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16360781/

相关文章:

c - SOR 程序不收敛(FORTRAN 到 C 的转换)

c - 为什么 Linux 内核模块中定义的 mmap 返回 MAP_FAILED?

C编译错误: undeclared (first use in this function)

c - 在c编程语言上为数据结构分配内存的不同方法

c - 我用错了memcpy吗?

c - C 中的短路错误处理

c++ - 混淆结构和结构指针

java - 在java中设计sql查询存储的最佳方法是什么?

c++ - C/C++ 用一个值填充结构数组

c - 函数 'memcpy' 的警告可能数据溢出是如何发生的以及如何修复它?