Поделиться через


memmove_s, wmemmove_s

Перемещает один буфер в другой. Здесь представлены версии memmove, wmemmove с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.

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), которые нужно скопировать.

Возвращаемое значение

Нуль, если успешно; код ошибки при неудаче

Условия возникновения ошибки

dest

numberOfElements

src

Возвращаемое значение

Содержимое dest.

NULL

any

any

EINVAL

без изменений

any

any

NULL

EINVAL

без изменений

any

< count

any

ERANGE

без изменений

Заметки

Копирует count байт символов из src в dest*.* Если некоторые части исходной области и области назначения перекрываются, то memmove_s гарантирует, что байты первоисточника в перекрывающейся области копируются перед перезаписью.

Если dest или src является указателем null или целевая строка слишком мала, эти функции вызывают обработчик недопустимых параметров, как описано в Проверка параметров. Если продолжение выполнения разрешено, эти функции возвращают EINVAL и устанавливают для errno значение EINVAL.

Требования

Подпрограмма

Обязательный заголовок

memmove_s

<string.h>

wmemmove_s

<wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Пример

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

Эквивалент в .NET Framework

System::Buffer::BlockCopy

См. также

Ссылки

Манипуляция буфером

_memccpy

memcpy, wmemcpy

strcpy_s, wcscpy_s, _mbscpy_s

strcpy, wcscpy, _mbscpy

strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l

strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l