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


memmove_s, wmemmove_s

Перемещает один буфер в другой. Эти функции — это версии с улучшениями безопасности, wmemmoveкак описано в функциях безопасности в CRT.memmove

Синтаксис

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 любое любое EINVAL не изменено
любое любое NULL EINVAL не изменено
любое < count любое ERANGE не изменено

Замечания

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

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

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Маршрут Обязательный заголовок
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);
}

Выходные данные

Before: 0123456789
After: 0012345789

См. также

Манипуляция буфером
_memccpy
memcpy, wmemcpy
strcpy_s, , wcscpy_s_mbscpy_s
strcpy, , wcscpy_mbscpy
strncpy_s, , _strncpy_s_l_wcsncpy_s_lwcsncpy_s_mbsncpy_s,_mbsncpy_s_l
strncpy, , _strncpy_l_wcsncpy_lwcsncpy_mbsncpy,_mbsncpy_l