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
の「サブスクエア」にコピーする場合は、手動で行う必要があります。