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));
}
これは正しいです?
それはうまくいくはずです:
int i;
for(i = 0; i<10; i++)
{
memcpy(&a[i], &c[i], sizeof(c[0]));
}
実際には次のようになります。
for(i = 0; i < 10; ++ i)
{
memcpy(&(a[i][0]), &(c[i][0]), 10 * sizeof(int));
}
私はそれが正しくないと思います、いいえ。
のmemcpy()
メモリ内レイアウトを知りa
、それを「尊重」する方法はsizeof c
ありません。隣接するバイトが上書きされますが、これは意図したものではない可能性があります。
の「サブスクエア」にコピーする場合a
は、手動で行う必要があります。