次の方法で共有


memcpy_s、wmemcpy_s

更新 : 2007 年 11 月

バッファ間でバイト数をコピーします。これらの関数は、「CRT のセキュリティ強化」に説明されているように、memcpy、wmemcpy のセキュリティが強化されたバージョンです。

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

パラメータ

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

  • numberOfElements
    コピー先のバッファのサイズ。

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

  • count
    コピーする文字数。

戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。

エラー条件

dest

numberOfElements

src

戻り値

dest の内容

NULL

any

any

EINVAL

変更されない

any

any

NULL

EINVAL

dest はゼロに設定される

any

< count

any

ERANGE

dest はゼロに設定される

解説

memcpy_s は、count に指定したバイト数を src から dest にコピーします。wmemcpy_s は、count に指定した数のワイド文字 (2 バイト) をコピーします。コピー元とコピー先を同じにした場合の memcpy_s の動作は未定義です。重なり合う領域を処理するには、memmove_s を使用します。

これらの関数では、パラメータの検証が行われます。dest または src が null ポインタであるか、numberOfElements がバッファに対して小さすぎる場合、「パラメータの検証」に説明されているように、これらの関数では無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、これらの関数は EINVAL を返し、errno を EINVAL に設定します。

必要条件

ルーチン

必須ヘッダー

memcpy_s

<memory.h> または <string.h>

wmemcpy_s

<wchar.h>

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

使用例

// 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 

.NET Framework の相当するアイテム

適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

バッファ操作

_memccpy

memchr、wmemchr

memcmp、wmemcmp

memmove、wmemmove

memset、wmemset

strcpy、wcscpy、_mbscpy

strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_l

strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l