web-dev-qa-db-ja.com

Cで2次元配列の一部をmemcpyする方法は?

Cで2次元配列をmemcpyする方法:

私は2次元配列を持っています:

int a[100][100];

int c[10][10];

memcpyを使用して配列cのすべての値を配列aにコピーしたいのですが、memcpyを使用してこれを行うにはどうすればよいですか?

int i;
for(i = 0; i<10; i++)
{
    memcpy(&a[i][10], c, sizeof(c));
}

これは正しいです?

11
user2131316

それはうまくいくはずです:

int i;
for(i = 0; i<10; i++)
{
    memcpy(&a[i], &c[i], sizeof(c[0]));
}
12
Fabien

実際には次のようになります。

for(i = 0; i < 10; ++ i)
{
  memcpy(&(a[i][0]), &(c[i][0]), 10 * sizeof(int));
}
2
cgledezma

私はそれが正しいとは思いません、いいえ。

memcpy()aのメモリ内レイアウトを認識し、それを「尊重」する方法はありません。sizeof c隣接バイトを上書きしますが、これは意図したものではない可能性があります。

aの「サブスクエア」にコピーする場合は、手動で行う必要があります。

2
unwind