Share via


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

請參閱

參考

緩衝區操作

_memccpy

memchr、wmemchr

memcmp、wmemcmp

memmove、wmemmove

memset、wmemset

strcpy_s、wcscpy_s、_mbscpy_s

strncpy_s、_strncpy_s_l、wcsncpy_s、_wcsncpy_s_l、_mbsncpy_s、_mbsncpy_s_l