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
См. также
Ссылки
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l