memcpywmemcpy

複製緩衝區之間的位元組。 這些函式已有更安全的版本可用,請參閱 memcpy_swmemcpy_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 複製至 destwmemcpy 會複製 count 個寬字元。 如果來源和目的區域重疊,則 memcpy 的行為未定義。 使用 memmove 處理重疊的區域。

重要

請確定目的地緩衝區夠大,足以容納複製的字元數目。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)

重要

因為這麼多緩衝區滿溢,因此有潛在的安全性入侵,進而追蹤到 memcpy 的不當使用,此函式由安全性開發週期 (SDL) 列在「禁止」的函式之列。 您可能會注意到一些 VC++ 程式庫類別仍繼續使用 memcpy。 此外,您可能會注意到 VC++ 編譯器最佳化工具有時候會發出 memcpy 呼叫。 Visual C++ 產品開發是依據 SDL 程序,因此已仔細評估過此禁用函式的使用方式。 程式庫使用它時,已仔細檢查過呼叫,以確定這些呼叫不會容許緩衝區滿溢。 若在編譯器中,有時特定程式碼模式會被辨識為與 memcpy 的模式相同,因此被函式的呼叫取代。 在這種情況下,使用 memcpy 不比原本的指令更安全;它們只是經過最佳化的效能微調 memcpy 函式的呼叫。 就像使用「安全的」CRT 函式並不保證安全性一樣 (只是使其較少有不安全的情況發生),使用「禁止的」函式並不一定危險 (只是需要更嚴謹的監督以確保安全性)。

因為 VC++ 編譯器和程式庫的 memcpy 使用方式已經過謹慎仔細的檢查,所以程式碼中會允許這些呼叫,否則會不符合 SDL。 應用程式的原始程式碼中導入的 memcpy 呼叫,只有在經過安全性專家檢閱後,才符合 SDL。

只有在 #include 陳述式之前定義 _CRT_SECURE_DEPRECATE_MEMORY 常數時,memcpywmemcpy 函式才會被取代,如下列範例所示:

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <memory.h>

#define _CRT_SECURE_DEPRECATE_MEMORY
#include <wchar.h>

需求

常式 必要的標頭
memcpy <memory.h><string.h>
wmemcpy <wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

如需如何使用 memcpy 的範例,請參閱 memmove

另請參閱

緩衝區操作
_memccpy
memchr, wmemchr
memcmpwmemcmp
memmovewmemmove
memsetwmemset
strcpy_swcscpy_s_mbscpy_s
strncpy_s_strncpy_s_lwcsncpy_s_wcsncpy_s_l_mbsncpy_s_mbsncpy_s_l