memcpy, wmemcpy
Копирует байты между буферами. Существуют более безопасные версии этих функций; см. раздел memcpy_s, wmemcpy_s.
void *memcpy( void *dest, const void *src, size_t count ); wchar_t *wmemcpy( wchar_t *dest, const wchar_t *src, size_t count );
Параметры
dest
Новый буфер.src
Буфер, из которого происходит копирование.count
Число копируемых символов.
Возвращаемое значение
Значение dest.
Заметки
memcpy копирует count байт из src в dest; wmemcpy копирует count расширенных символов (двухбайтовых). При перекрытии исходного и конечного буферов поведение memcpy не определено. Используйте memmove для обработки перекрывающихся областей.
![]() |
---|
Убедитесь в том, что буфер назначения равен или превосходит по размеру исходный буфер.Дополнительные сведения см. в разделе Как избежать переполнения буфера. |
![]() |
---|
Так как множество выявленных случаев переполнения буфера, которые могут привести к нарушениям безопасности, было связано с ненадлежащим использованием memcpy, эта функция была включена в список "запрещенных" в рамках программы Security Development Lifecycle (SDL).Вы можете заметить, что некоторые библиотечные классы VC++ по-прежнему используют memcpy.Более того, можно заметить, что оптимизирующий компилятор VC++ иногда также вызывает функцию memcpy.Язык Visual C++ разрабатывался в соответствии с требованиями SDL, поэтому использование этой запрещенной функции тщательно анализировалось.В случае использования в библиотеке вызовы были тщательно изучены на предмет того, не могут ли они вызвать переполнение буфера.В случае с компилятором некоторые шаблоны кода были признаны идентичными шаблону memcpy и поэтому заменены на вызов функции.В таких случаях использование функции memcpy не менее безопасно, чем использование исходных инструкций, поэтому вызов функции memcpy, оптимизированной в плане производительности, является более предпочтительным.Точно так же, как использование "безопасных" функций CRT не гарантирует безопасности, использование "запрещенных" функций не обязательно приводит к опасным ситуациям (они просто требуют более внимательного подхода к обеспечению безопасности). Так как использование функции memcpy в компиляторе VC++ и библиотеках было тщательно проанализировано, ее вызовы разрешены в коде, который в остальном соответствует процессу SDL.Вызовы memcpy в исходном коде приложений соответствуют процессу SDL, только если они были проверены специалистами по безопасности. |
Функции memcpy и wmemcpy будут выведены из употребления, только если перед оператором включения определена константа _CRT_SECURE_DEPRECATE_MEMORY, показывающая, что эти функции должны быть выведены из употребления, как в примере ниже.
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>
или
#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
memcpy |
<memory.h> или <string.h> |
wmemcpy |
<wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Пример
Пример использования memmove см. в разделе memcpy.
См. также
Ссылки
strncpy_s, _strncpy_s_l, wcsncpy_s, _wcsncpy_s_l, _mbsncpy_s, _mbsncpy_s_l