memmove_s、wmemmove_smemmove_s, wmemmove_s

バッファーを別のバッファーに移動します。Moves one buffer to another. これらは、「CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化されたバージョンの memmove、wmemmove です。These are versions of memmove, wmemmove with security enhancements as described in Security Features in the CRT.

構文Syntax

errno_t memmove_s(
   void *dest,
   size_t numberOfElements,
   const void *src,
   size_t count
);
errno_t wmemmove_s(
   wchar_t *dest,
   size_t numberOfElements,
   const wchar_t *src,
   size_t count
);

パラメーターParameters

destdest
コピー先のオブジェクト。Destination object.

numberOfElementsnumberOfElements
コピー先のバッファーのサイズ。Size of the destination buffer.

srcsrc
コピー元のオブジェクト。Source object.

countcount
バイト数 (memmove_s) または文字 (wmemmove_s) にコピーします。Number of bytes (memmove_s) or characters (wmemmove_s) to copy.

戻り値Return Value

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

エラー条件Error Conditions

destdest numberOfElementsnumberOfElements srcsrc 戻り値Return value 内容destContents of dest
NULLNULL 任意any 任意any EINVALEINVAL 変更されないnot modified
任意any 任意any NULLNULL EINVALEINVAL 変更されないnot modified
任意any < count< count 任意any ERANGEERANGE 変更されないnot modified

RemarksRemarks

コピーカウントバイトの文字からsrcdestします。Copies count bytes of characters from src to dest. コピー元とコピー先の一部の領域が重なっている場合memmove_sにより上書きされる前に、重複領域に元のコピー元のバイトがコピーされるようになります。If some regions of the source area and the destination overlap, memmove_s ensures that the original source bytes in the overlapping region are copied before being overwritten.

場合dest場合src null ポインター、または」の説明に従って、これらの関数が、無効なパラメーター ハンドラーを呼び出しますコピー先文字列が小さすぎる場合パラメーターの検証 .If dest or if src is a null pointer, or if the destination string is too small, these functions invoke an invalid parameter handler, as described in Parameter Validation . これらの関数を返すかどうかは、引き続き実行が許可された、 EINVAL設定とerrnoEINVALします。If execution is allowed to continue, these functions return EINVAL and set errno to EINVAL.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
memmove_smemmove_s <string.h><string.h>
wmemmove_swmemmove_s <wchar.h><wchar.h>

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

Example

// crt_memmove_s.c
//
// The program demonstrates the
// memmove_s function which works as expected
// for moving overlapping regions.

#include <stdio.h>
#include <string.h>

int main()
{
   char str[] = "0123456789";

   printf("Before: %s\n", str);

   // Move six bytes from the start of the string
   // to a new position shifted by one byte. To protect against
   // buffer overrun, the secure version of memmove requires the
   // the length of the destination string to be specified.

   memmove_s((str + 1), strnlen(str + 1, 10), str, 6);

   printf_s(" After: %s\n", str);
}

出力Output

Before: 0123456789
After: 0012345789

関連項目See also

バッファー操作Buffer Manipulation
_memccpy_memccpy
memcpy、wmemcpymemcpy, wmemcpy
strcpy_s、wcscpy_s、_mbscpy_sstrcpy_s, wcscpy_s, _mbscpy_s
strcpy、wcscpy、_mbscpystrcpy, wcscpy, _mbscpy
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
strncpy、_strncpy_l、wcsncpy、_wcsncpy_l、_mbsncpy、_mbsncpy_lstrncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l