我有一个结构:
struct points{
int i;
int x;
int y;
};
我创建了一个struct数组,并将其命名为temp。然后我做了另一个并命名为pt。假设我把一些内容放到temp。如何将temp的元素复制到pt?
这是我的memcpy代码,编译器说它是分段错误。请帮助。
#define MAX_POINTS 400
struct points temp[MAX_POINTS];
/* Some code to input elements to array temp */
struct points pt[i]; /* array of struct with i elements*/
memcpy(&pt, &temp, sizeof (temp));
答案 0 :(得分:3)
你必须小心,只复制两者中较小者的大小,这里我想i < MAX_POINTS
memcpy(pt, temp, sizeof pt);
另外,其他人已经说过&
不正确。你需要一个指向第一个元素的指针,例如&pt[0]
,或只是pt
,因为数组在该上下文中衰减为&pt[0]
。
请注意,如果pt
是变量,则i
的分配是可变长度数组。这可能很危险,如果i
变得太大,会导致堆栈溢出。因此,如果您打算在此处使用大型数组,请更好地使用malloc
:
struct points* pt = malloc(sizeof(struct points[i]));
memcpy(pt, temp, sizeof(struct points[i]);
不幸的是,您不能将sizeof pt
用于memcpy
。