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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。
参照
参照
strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_l
strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l