我一直在努力解决这个问题。我在stackoverflow上找到了什么,其他地方只是这样做:
memcpy(&a, &b, sizeof(b));
但对我来说,这不起作用。所以我想,我在没有任何意外行为的情况下分享对我有用的东西。
答案 0 :(得分:2)
假设你有:
#define N 42
struct struct_name *a = malloc(sizeof *a * N); // allocate N objects
struct struct_name *b = malloc(sizeof *b * N); // allocate N objects
然后复制结构对象数组的正确memcpy
调用是:
memcpy(a, b, sizeof *a * N);
答案 1 :(得分:1)
在我的情况下,先前的解决方案无法正常工作,例如问题中的一个! (它复制了大约一半的第一个元素) 所以万一有人需要一个解决方案,这将给你正确的结果,这里是:
memcpy(a, b, n * sizeof(*b));
更多细节:
int i, n = 50;
struct YourStruct *a, *b;
a = calloc(n, sizeof(*a));
b = malloc(n * sizeof(*b));
for (i = 0; i < n; ++i) {
// filling a
}
memcpy(b, a, n * sizeof(*a)); // <----- memcpy 'n' elements from 'a' to 'b'
if (a != NULL) free(a); // free 'a'
a = calloc(2*n, sizeof(*a)); // 'a' is size 2n now
memcpy(a, b, n * sizeof(*b)); // <------ memcpy back the 'n' elements from 'b' to 'a'
// do other stuff with 'a' (filling too)...
一些注意事项: