如何在c中的struct中使用memcpy?

时间:2013-07-11 14:15:23

标签: c segmentation-fault memcpy

我有一个结构:

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));

1 个答案:

答案 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

相关问题