0

私は構造体を持っています:

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

1 に答える 1

3

2つのうち小さい方のサイズのみをコピーするように注意する必要があります。ここでは、i < MAX_POINTS

memcpy(pt, temp, sizeof pt);

また、他の人がすでに言っているように、&それらは正しくありません。&pt[0]たとえば、最初の要素へのポインターが必要です。または、そのコンテキストでpt配列が減衰するのと同じです。&pt[0]

が変数の場合、 の割り当てはpt可変長配列であることに注意してくださいiiこれは危険であり、が大きくなりすぎるとスタック オーバーフローにつながる可能性があります。したがって、ここで大きな配列を使用する予定がある場合は、以下を使用することをお勧めしmallocます。

struct points* pt = malloc(sizeof(struct points[i]));
memcpy(pt, temp, sizeof(struct points[i]);

sizeof pt残念ながら、には使用できませんmemcpy

于 2013-07-11T14:25:57.803 に答える