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_l
wcsncpy_s
_mbsncpy_s
,_mbsncpy_s_l
strncpy
, , _strncpy_l
_wcsncpy_l
wcsncpy
_mbsncpy
,_mbsncpy_l