Поделиться через


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_lwcsncpy_mbsncpy,_mbsncpy_l
strncpy_s, , _strncpy_s_l_wcsncpy_s_lwcsncpy_s_mbsncpy_s,_mbsncpy_s_l