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_l
wcsncpy
_mbsncpy
,_mbsncpy_l
strncpy_s
, , _strncpy_s_l
_wcsncpy_s_l
wcsncpy_s
_mbsncpy_s
,_mbsncpy_s_l