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 的不當使用,此函式由安全性開發週期 (SDL) 列在「禁止」的函式之列。您可能會注意到一些 VC++ 程式庫類別仍繼續使用 memcpy。此外,您可能會注意到 VC++ 編譯器最佳化工具有時候會發出 memcpy 呼叫。Visual C++ 產品開發是依據 SDL 程序,因此已仔細評估過此禁用函式的使用方式。程式庫使用它時,已仔細檢查過呼叫,以確定這些呼叫不會容許緩衝區滿溢。若在編譯器中,有時特定程式碼模式會被辨識為與 memcpy 的模式相同,因此被函式的呼叫取代。在這種情況下,使用 memcpy 不比原本的指令更安全;它們只是經過最佳化的效能微調 memcpy 函式的呼叫。就像使用「安全的」CRT 函式並不保證安全性 (它們只會有難以不安全的效果) 一樣,使用「禁止」函式並不一定危險 (它們只需要更嚴謹地來確保安全性)。 因為 VC++ 編譯器和程式庫的 memcpy 使用方式已經過謹慎仔細的檢查,所以程式碼中會允許這些呼叫,否則會不符合 SDL。應用程式的原始程式碼中導入的 memcpy 呼叫,只有在經過安全性專家檢閱後,才符合 SDL。 |
如果為了使函式被取代,在包含的陳述式之前就已定義常數 _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。
請參閱
參考
strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l