c - 如何在c中的Struct中使用memcpy?

标签 c segmentation-fault memcpy

我有一个结构:

struct points{
int i;
int x;
int y;
};

我制作了一个结构数组并将其命名为 temp。然后我做了另一个并命名为pt。假设我把一些内容放到临时文件中。如何将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));

最佳答案

你必须小心,只复制两者中较小的那个,这里我假设 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 .

关于c - 如何在c中的Struct中使用memcpy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17595797/

相关文章:

c++ - 调用 `gdk_rgba_to_string()` 时出现段错误

c - C 中参数的顺序

c - 将参数作为来自终端的输入

c - memcpy 混淆溢出/用 gcc 覆盖?

c - 通过管道将图像发送到C中的子进程

c - 将整个数组作为参数传递给函数

c - memcpy 重写不起作用

c++ - 编写符合严格别名的 memcpy

c - 在 Solaris 上构建 Node.JS : "Use of <stdbool.h> is valid only in a c99 compilation environment."

c - 否定 &&(逻辑与)运算的结果是否安全?