memcpy_s, wmemcpy_s
Копирует байты между буферами. Здесь представлены версии memcpy, wmemcpy с усовершенствованной безопасностью, как описано в разделе Функции безопасности в CRT.
errno_t memcpy_s(
void *dest,
size_t numberOfElements,
const void *src,
size_t count
);
errno_t wmemcpy_s(
wchar_t *dest,
size_t numberOfElements,
const wchar_t *src,
size_t count
);
Параметры
dest
Новый буфер.numberOfElements
Размер буфера назначения.src
Буфер, из которого происходит копирование.count
Число копируемых знаков.
Возвращаемое значение
Нуль, если успешно; код ошибки при неудаче.
Условия возникновения ошибки
dest |
numberOfElements |
src |
Возвращаемое значение |
Содержимое dest. |
---|---|---|---|---|
NULL |
any |
any |
EINVAL |
без изменений |
any |
any |
NULL |
EINVAL |
dest обнулено |
any |
< count |
any |
ERANGE |
dest обнулено |
Заметки
memcpy_s копирует count байтов из src в dest; wmemcpy_s копирует count расширенных символов (двухбайтовых). При перекрытии исходной и конечной строк поведение инструкции memcpy_s не определено. Используйте memmove_s для обработки перекрывающихся областей.
Эти функции проверяют свои параметры. Если dest или src — нулевой указатель, или numberOfElements слишком мало для буфера, эти функции вызывают обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции возвращают EINVAL и устанавливают для errno значение EINVAL.
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
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");
}
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.
См. также
Ссылки
strncpy, _strncpy_l, wcsncpy, _wcsncpy_l, _mbsncpy, _mbsncpy_l
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l