void *memcpy( void *dest, const void *src, size_t count ); errno_t memcpy_s( void *dest, size_t sizeInBytes, const void *src, size_t count );destは、コピー先のバッファ、srcはコピー元バッファ、countはコピーするバイト数です。sizeInButesは、コピー先バッファのサイズです。
では、簡単なサンプルを見てみましょう。
/* memcpy01.c */ #include <stdio.h> #include <memory.h> #include <string.h> int main() { int array1[10], array2[10], i; struct _tagx { int a; char name[9]; } x, y; for (i = 0; i < 10; i++) array1[i] = i; memcpy(array2, array1, sizeof(int) * 10); for (i = 0; i < 10; i++) { printf("array1[%d] = %d, array2[%d] = %d\n", i, array1[i], i, array2[i]); } printf("\n"); memcpy_s(array2, sizeof(int) * 10, array1, sizeof(int) * 10); for (i = 0; i < 10; i++) { printf("array1[%d] = %d, array2[%d] = %d\n", i, array1[i], i, array2[i]); } printf("\n"); x.a = 100; strcpy_s(x.name, (rsize_t)sizeof(int) * 9, "abc" ); memcpy(&y, &x, sizeof(x)); printf("y.a = %d, y.name = %s\n", y.a, y.name); memcpy_s(&y, sizeof(y), &x, sizeof(x)); printf("y.a = %d, y.name = %s\n", y.a, y.name); }このプログラムでは、memcpyとmemcpy_sの両方の関数を使って結果が同じであることを確かめています。
最初に、array1配列に0から9までの整数値を代入して、memcpy関数でarray2にコピーしています。
次に、同じことをmemcpy_s関数を使って行っています。
また、xという構造体を用意してx.aに100を、x.nameに"abc"を格納しています。 これをmemcpyとmemcpy_s関数を利用してyにコピーしています。
実行結果は次のようになります。
当たり前ですが、どちらの関数を使っても結果は同じです。
Update Sep/02/2007 By Y.Kumei