memcpy_s、wmemcpy_smemcpy_s, wmemcpy_s

バッファー間でバイトをコピーします。Copies bytes between buffers. これらは、「CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化されたバージョンの memcpy、wmemcpy です。These are versions of memcpy, wmemcpy with security enhancements as described in Security Features in the CRT.

構文Syntax

errno_t memcpy_s(
   void *dest,
   size_t destSize,
   const void *src,
   size_t count
);
errno_t wmemcpy_s(
   wchar_t *dest,
   size_t destSize,
   const wchar_t *src,
   size_t count
);

パラメーターParameters

destdest
コピー先のバッファー。New buffer.

destSizedestSize
コピー先バッファーのサイズ。memcpy_s の場合はバイト単位、wmemcpy_s の場合はワイド文字列 (wchar_t) 単位です。Size of the destination buffer, in bytes for memcpy_s and wide characters (wchar_t) for wmemcpy_s.

srcsrc
コピー元のバッファー。Buffer to copy from.

countcount
コピーする文字数。Number of characters to copy.

戻り値Return Value

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。Zero if successful; an error code on failure.

エラー条件Error Conditions

destdest destSizedestSize srcsrc countcount 戻り値Return value 内容destContents of dest
任意any 任意any 任意any 00 00 変更されないNot modified
NULLNULL 任意any 任意any 0 以外non-zero EINVALEINVAL 変更されないNot modified
任意any 任意any NULLNULL 0 以外non-zero EINVALEINVAL destは 0 に設定dest is zeroed out
任意any < count< count 任意any 0 以外non-zero ERANGEERANGE destは 0 に設定dest is zeroed out

RemarksRemarks

memcpy_sコピーカウントからバイトsrcdest;wmemcpy_sコピーカウントワイド文字 (2 バイト)。memcpy_s copies count bytes from src to dest; wmemcpy_s copies count wide characters (two bytes). ソースと変換先が重なり合うかどうかの動作memcpy_sが定義されていません。If the source and destination overlap, the behavior of memcpy_s is undefined. 使用memmove_s重なり合っている領域を処理します。Use memmove_s to handle overlapping regions.

これらの関数では、パラメーターの検証が行われます。These functions validate their parameters. 場合カウント0 以外の場合とdestまたはsrc null ポインター、またはdestSizeよりも小さいカウント、」の説明に従って、これらの関数は、無効なパラメーター ハンドラーを呼び出しますパラメーターの検証です。If count is non-zero and dest or src is a null pointer, or destSize is smaller than count, these functions invoke the invalid parameter handler, as described in Parameter Validation. これらの関数を返すかどうかは、引き続き実行が許可された、 EINVALまたはERANGE設定とerrno戻り値にします。If execution is allowed to continue, these functions return EINVAL or ERANGE and set errno to the return value.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
memcpy_smemcpy_s <memory.h> または <string.h><memory.h> or <string.h>
wmemcpy_swmemcpy_s <wchar.h><wchar.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// crt_memcpy_s.c
// Copy memory in a more secure way.

#include <memory.h>
#include <stdio.h>

int main()
{
   int a1[10], a2[100], i;
   errno_t err;

   // Populate a2 with squares of integers
   for (i = 0; i < 100; i++)
   {
      a2[i] = i*i;
   }

   // Tell memcpy_s to copy 10 ints (40 bytes), giving
   // the size of the a1 array (also 40 bytes).
   err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
   if (err)
   {
      printf("Error executing memcpy_s.\n");
   }
   else
   {
     for (i = 0; i < 10; i++)
       printf("%d ", a1[i]);
   }
   printf("\n");
}
0 1 4 9 16 25 36 49 64 81

関連項目See also

バッファー操作Buffer Manipulation
_memccpy_memccpy
memchr、wmemchrmemchr, wmemchr
memcmp、wmemcmpmemcmp, wmemcmp
memmove、wmemmovememmove, wmemmove
memset、wmemsetmemset, wmemset
strcpy、wcscpy、_mbscpystrcpy, wcscpy, _mbscpy
strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_lstrncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_lstrncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l