memmove_s, wmemmove_s

バッファーを別のバッファーに移動します。 これらの関数は、「CRT のセキュリティ機能」で説明されているように、セキュリティが強化されたバージョンの memmovewmemmove です。

構文

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
);

パラメーター

dest
コピー先のオブジェクト。

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

src
コピー元のオブジェクト。

count
コピーするバイト数 (memmove_s) または文字数 (wmemmove_s)。

戻り値

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

エラー条件

dest numberOfElements src 戻り値 dest の内容
NULL 任意 任意 EINVAL 変更されない
任意 任意 NULL EINVAL 変更されない
任意 < count 任意 ERANGE 変更されない

解説

srcからdestcountバイトの文字をコピーします。 ソースリージョンとコピー先リージョンの一部が重複している場合、 memmove_s は重複するリージョンの元のソース バイトが上書きされる前にコピーされることを保証します。

destまたはsrcが null ポインターの場合、または宛先文字列が小さすぎる場合は、「パラメーター検証で説明されているように、これらの関数は無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、これらの関数は EINVAL を返し、errnoEINVAL に設定します。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

要件

ルーチンによって返される値 必須ヘッダー
memmove_s <string.h>
wmemmove_s <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

// 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);
}

出力

Before: 0123456789
After: 0012345789

関連項目

バッファー操作
_memccpy
memcpy, wmemcpy
strcpy_swcscpy_s_mbscpy_s
strcpywcscpy_mbscpy
strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l
strncpy_strncpy_lwcsncpy_wcsncpy_l_mbsncpy_mbsncpy_l