複製鏈接
請複製以下鏈接發送給好友

memcpy

鎖定
memcpy指的是C和C++使用的內存拷貝函數,函數原型為void *memcpy(void *destin, void *source, unsigned n);函數的功能是從源內存地址的起始位置開始拷貝若干個字節到目標內存地址中,即從源source中拷貝n個字節到目標destin中。 [1] 
中文名
內存拷貝函數
外文名
memcpy
功    能
拷貝n個字節
返回值
指向dest的指針
所在頭文件

memcpymemcpy函數語法

memcpy函數原型

void *memcpy(void *destin, void *source, unsigned n);

memcpy參數

  • destin-- 指向用於存儲複製內容的目標數組,類型強制轉換為 void* 指針。
  • source-- 指向要複製的數據源,類型強制轉換為 void* 指針。
  • n-- 要被複制的字節數。

memcpy返回值

該函數返回一個指向目標存儲區destin的指針。

memcpy功能

從源source所指的內存地址的起始位置開始拷貝n個字節到目標destin所指的內存地址的起始位置中。 [2] 
memcpy() 並不關心被複制的數據類型,只是逐字節地進行復制,這給函數的使用帶來了很大的靈活性,可以面向任何數據類型進行復制。 [5] 
需要注意的是:
  • destin指針要分配足夠的空間,也即大於等於 n 字節的空間。如果沒有分配空間,會出現斷錯誤。 [5] 
  • destin和 source所指的內存空間不能重疊(如果發生了重疊,使用 memmove()會更加安全)。 [5] 

memcpy所需頭文件

C語言:#include<string.h>
C++:#include<cstring>

memcpy應用説明

1.source和destin所指的內存區域可能重疊,但是如果source和destin所指的內存區域重疊,那麼這個函數並不能夠確保source所在重疊區域在拷貝之前不被覆蓋。而使用memmove可以用來處理重疊區域。函數返回指向destin的指針。
2.如果目標數組destin本身已有數據,執行memcpy()後,將覆蓋原有數據(最多覆蓋n)。如果要追加數據,則每次執行memcpy後,要將目標數組地址增加到要追加數據的地址。
注意:source和destin都不一定是數組,任意的可讀寫的空間均可。 [3] 

memcpy區別

strcpy和memcpy主要有以下3方面的區別。
1、複製的內容不同。strcpy只能複製字符串,而memcpy可以複製任意內容,例如字符數組、整型、結構體、類等。
2、複製的方法不同。strcpy不需要指定長度,它遇到被複制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定複製的長度。
3、用途不同。通常在複製字符串時用strcpy,而需要複製其他類型數據時則一般用memcpy。 [3]  [2]  由於字符串是以“\0”結尾的,所以對於在數據中包含“\0”的數據只能用memcpy。 [4] 
參考資料