次の方法で共有


memcpy、wmemcpy

バッファー間でバイトをコピーします。 これらの関数のセキュリティを強化したバージョンについては、「memcpy_s、wmemcpy_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 は、src から dest に count バイトをコピーし、wmemcpy は count 個のワイド文字 (2 バイト) をコピーします。 コピー元とコピー先が重なり合う場合の memcpy の動作は未定義です。 重なり合う領域を処理するには、memmove を使用します。

セキュリティに関するメモセキュリティに関するメモ

コピー先のバッファーが、ソース バッファーと同じサイズ、または大きいサイズであることを確認してください。詳細については、「Avoiding Buffer Overruns」を参照してください。

セキュリティに関するメモセキュリティに関するメモ

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

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

memcpy 関数と wmemcpy 関数が非推奨になるのは、以下の例に示すとおり、インクルード ステートメントの前で _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>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

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

参照

関連項目

バッファー操作

_memccpy

memchr、wmemchr

memcmp、wmemcmp

memmove、wmemmove

memset、wmemset

strcpy_s、wcscpy_s、_mbscpy_s

strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l