C从结构指针复制数据

C从结构指针复制数据,c,struct,C,Struct,我在创建数据副本方面有一个小问题 在C中,我有函数 struct data* copy_and_change(const struct data* input_data) 结构数据包含一个指向结构头的指针和一些整数 struct header是包含有关用户字符、整数 struct data{ struct header* info; int salary; }; 所以参数是指向内存中数据的常量结构指针 我的函数应该从参数中获取数据并创建该数据的副本,重新排列它并返回指向新

我在创建数据副本方面有一个小问题

在C中,我有函数

struct data* copy_and_change(const struct data* input_data)
结构数据包含一个指向结构头的指针和一些整数

struct header是包含有关用户字符、整数

struct data{
    struct header* info;  
    int salary;
};
所以参数是指向内存中数据的常量结构指针

我的函数应该从参数中获取数据并创建该数据的副本,重新排列它并返回指向新数据的指针

重新安排和处理数据不是问题。问题是复制数据

我的问题:我应该用什么来复制数据

我试着用memcpy。 gcc在'memcpy'调用中为'sizeof'提供错误参数,该参数与目标函数的表达式相同;你是想取消它的引用吗?
-如果要创建输入数据的副本,可能是因为param是const。那你为什么不创建一个局部变量,把数据放进去。我不明白memcpy的需要

试试这个

struct  data *copy=malloc(sizeof(struct data));
*copy=*input_data;
 //your rearranging code here
 return copy;

我试着用memcpy,发生了什么事?我试着用memcpy。-->把密码贴出来。更好的是:。在memcpy之前,您是否使用malloc分配了合适的内存块?如果可以进行浅拷贝,那么使用memcpy或简单分配应该可以。假设您已经为复制目的地创建了一个合适的数据结构实例,您甚至不需要使用memcpy,只需将一个结构分配给另一个结构,C就会复制整个结构。但是它是一个浅拷贝,所以如果你需要一个深拷贝,你也需要拷贝数据,当然,你需要为所有被拷贝的内容分配空间。我从函数签名中推测OP需要返回一个指向新的、动态分配的结构的指针。在这种情况下,局部变量部分似乎不相关,但结构赋值角度仍然是一个很好的观察结果。我倾向于同意,将一个结构的全部内容复制到同一类型的另一个结构的最佳方法是通过赋值,除非有一两个特殊情况在这里不适用。我修正了它。现在我找到了结构的正确大小。我给你解释得很糟糕。现在:我创建了新的结构结果,然后使用输入数据计算mallocate size,然后使用assgiment复制数据。现在,当我打印%p}地址|时,它们是不同的。为了100%确保它是正确的,我更新了一些数据并将它们保存到文件中。谢谢你们,为我的错误道歉english@Jimmyguitaro检查我的答案,你是这个意思吗?