memcpywmemcpy

バッファー間でバイトをコピーします。 これらの関数のセキュリティを強化したバージョンを使用できます。「memcpy_swmemcpy_s」を参照してください。

構文

void *memcpy(
   void *dest,
   const void *src,
   size_t count
);
wchar_t *wmemcpy(
   wchar_t *dest,
   const wchar_t *src,
   size_t count
);

パラメーター

dest
コピー先のバッファー。

src
コピー元のバッファー。

count
コピーする文字数。

戻り値

dest の値。

解説

memcpy は、count から srcdest バイトをコピーし、wmemcpycount 個のワイド文字をコピーします。 コピー元とコピー先の領域が重なり合う場合の memcpy の動作は未定義です。 重なり合う領域を処理するには、memmove を使用します。

重要

コピー先のバッファーが、コピー対象の文字数を収容できる十分な大きさであることを確認します。 詳細については、「バッファー オーバーランの回避」を参照してください。

重要

memcpy の不適切な使用に由来するバッファー オーバーランと、それに伴う潜在的なセキュリティの脆弱性が多数生じているため、この関数は、セキュリティ開発ライフ サイクル (SDL) で「禁止」関数に挙げられています。 一部の VC++ ライブラリ クラスが memcpy を使用し続けていることにお気付きかもしれません。 さらに、VC++ コンパイラ オプティマイザーが memcpy への呼び出しを生成する場合があることにもお気付きかもしれません。 Visual C++ 製品は SDL のプロセスに従って開発されているため、この禁止関数の利用は綿密に評価されてきました。 ライブラリがこれを使用する場合、これらの呼び出しによってバッファー オーバーランが許可されないよう、慎重に調査されてきました。 コンパイラの場合、時折、特定のコード パターンが memcpy のパターンと同一であると認識されて、この関数の呼び出しに置き換えられることがあります。 そのような場合は、memcpy を利用しても、元の手順と比べて安全性は変わらないため、パフォーマンスが調整された memcpy 関数の呼び出しを使用するように最適化されます。 「安全」な CRT 関数を使用しても安全性が保証されるわけではない (安全でない状態になりにくいということに過ぎない) ように、「禁止された」関数を使用しても、危険であると保証されるわけではありません (安全性を保障するのに、より大きな監視が必要になるに過ぎません)。

VC++ コンパイラとライブラリによる memcpy の使用は注意深く調査されているため、他の面では SDL に準拠しているコード内でその呼び出しを使用することが許可されています。 アプリケーションのソース コードで memcpy の呼び出しを使用した場合は、セキュリティの専門家による確認を受けない限り、SDL 準拠になりません。

次の例に示すように、memcpy および wmemcpy 関数は、#include ステートメントの前に定数 _CRT_SECURE_DEPRECATE_MEMORY が定義されている場合にのみ非推奨になります。

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>

または

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>

要件

ルーチンによって返される値 必須ヘッダー
memcpy <memory.h> または <string.h>
wmemcpy <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

memcpy の使用方法の例については、「memmove」を参照してください。

関連項目

バッファー操作
_memccpy
memchrwmemchr
memcmpwmemcmp
memmovewmemmove
memsetwmemset
strcpy_swcscpy_s_mbscpy_s
strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l