memcpy_s
, wmemcpy_s
Копирует байты между буферами. Эти функции — это версии с улучшениями безопасности,wmemcpy
как описано в функциях безопасности в CRT.memcpy
Синтаксис
errno_t memcpy_s(
void *dest,
size_t destSize,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t destSize,
const wchar_t *src,
size_t count
);
Параметры
dest
Новый буфер.
destSize
Размер целевого буфера в байтах для memcpy_s
и широких символов (wchar_t
) для wmemcpy_s
.
src
Буфер, из которого происходит копирование.
count
Число копируемых символов.
Возвращаемое значение
Возвращает нуль в случае успеха или код ошибки в случае неудачи.
Условия ошибок
dest |
destSize |
src |
count |
Возвращаемое значение | Содержимое dest |
---|---|---|---|---|---|
любое | любое | любое | 0 | 0 | Не изменено |
NULL |
любое | любое | ненулевое значение | EINVAL |
Не изменено |
любое | любое | NULL |
ненулевое значение | EINVAL |
dest обнуляется |
любое | < count |
любое | ненулевое значение | ERANGE |
dest обнуляется |
Замечания
memcpy_s
копирует count
байты из src
dest
; wmemcpy_s
копирует count
широкие символы. Если исходные и целевые регионы перекрываются, поведение memcpy_s
не определено. Используйте memmove_s
для обработки перекрывающихся областей.
Эти функции проверяют свои параметры. Если count
значение не равно нулю и src
dest
является пустым указателем или destSize
меньшеcount
, эти функции вызывают обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение разрешено продолжать, эти функции возвращают EINVAL
или ERANGE
задают errno
значение возвращаемого значения.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
memcpy_s |
<memory.h> или <string.h> |
wmemcpy_s |
<wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_memcpy_s.c
// Copy memory in a more secure way.
#include <memory.h>
#include <stdio.h>
int main()
{
int a1[10], a2[100], i;
errno_t err;
// Populate a2 with squares of integers
for (i = 0; i < 100; i++)
{
a2[i] = i*i;
}
// Tell memcpy_s to copy 10 ints (40 bytes), giving
// the size of the a1 array (also 40 bytes).
err = memcpy_s(a1, sizeof(a1), a2, 10 * sizeof (int) );
if (err)
{
printf("Error executing memcpy_s.\n");
}
else
{
for (i = 0; i < 10; i++)
printf("%d ", a1[i]);
}
printf("\n");
}
0 1 4 9 16 25 36 49 64 81
См. также
Манипуляция буфером
_memccpy
memchr
, wmemchr
memcmp
, wmemcmp
memmove
, wmemmove
memset
, wmemset
strcpy
, wcscpy
, _mbscpy
strncpy
, _strncpy_l
, wcsncpy
, _wcsncpy_l
, _mbsncpy
, _mbsncpy_l
strncpy_s
, _strncpy_s_l
, wcsncpy_s
, _wcsncpy_s_l
, _mbsncpy_s
, _mbsncpy_s_l
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по