memrootじしょ
英和翻訳
memcpy
memcpy
/ˈmɛmkɒpi/
メムコピー
1.
メモリブロックを指定されたバイト数だけ別のメモリブロックにコピーする関数。
C言語やC++において、指定されたバイト数のメモリブロックをある場所から別の場所にコピーするために使用される標準ライブラリ関数です。高速なデータ転送によく用いられますが、コピー元とコピー先が重なっている場合には未定義の動作となる可能性があるため、その場合は`memmove`を使用することが推奨されます。
char
source[]
=
"Hello";
char
destination[10];
memcpy(destination,
source,
strlen(source)
+
1);
(source配列の文字列をdestination配列にコピーします。)
char source[] = "Hello";
Helloという文字列を格納するsourceという文字配列を宣言し、初期化しています。
char destination[10];
10文字分のメモリを持つdestinationという文字配列を宣言しています。
memcpy(destination, source, strlen(source) + 1);
sourceからdestinationへ、文字列の長さ(ヌル終端文字を含む)分のバイト数をコピーします。
int
arr1[]
=
{1,
2,
3};
int
arr2[3];
memcpy(arr2,
arr1,
sizeof(arr1));
(arr1配列の整数をarr2配列にコピーします。)
int arr1[] = {1, 2, 3};
1, 2, 3という整数を格納するarr1という整数配列を宣言し、初期化しています。
int arr2[3];
3つの整数分のメモリを持つarr2という整数配列を宣言しています。
memcpy(arr2, arr1, sizeof(arr1));
arr1からarr2へ、arr1の全バイト数(配列全体のサイズ)をコピーします。
char
buffer[20]
=
"abcdefghij";
memcpy(buffer
+
2,
buffer,
5);
//
This
can
be
problematic
(bufferの一部をbufferの別の部分にコピーします。これはmemcpyでは安全ではない可能性があります。)
char buffer[20] = "abcdefghij";
abcdefghijという文字列を格納するbufferという文字配列を宣言し、初期化しています。
memcpy(buffer + 2, buffer, 5);
bufferの先頭から5バイトを、bufferの2バイト目から始まる位置にコピーします。
// This can be problematic
これは、コピー元とコピー先が重なっているため、memcpyでは未定義の動作を引き起こす可能性があることを示しています。memmoveの使用が推奨されます。
関連
memmove
memset
memcmp
strcpy
strncpy
C standard library
pointer
memory