%
複製緩衝區之間的位元組。 這些函式已有更安全的版本可用,請參閱 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
處理重疊的區域。
重要
請確定目的地緩衝區夠大,足以容納複製的字元數目。 如需詳細資訊,請參閱 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
常數時,memcpy
和 wmemcpy
函式才會被取代,如下列範例所示:
#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
memcmp
??wmemcmp
memmove
??wmemmove
memset
??wmemset
},