函數語法
函數原型
void *memcpy(void *destin, void *source, unsigned n);
參數
destin-- 指向用于存儲複制内容的目标數組,類型強制轉換為 void* 指針。
source-- 指向要複制的數據源,類型強制轉換為 void* 指針。
n-- 要被複制的字節數。
返回值
該函數返回一個指向目标存儲區destin的指針。
功能
從源source所指的内存地址的起始位置開始拷貝n個字節到目标destin所指的内存地址的起始位置中。
所需頭文件
C語言:#include
C++:#include
應用說明
1.source和destin所指的内存區域可能重疊,但是如果source和destin所指的内存區域重疊,那麼這個函數并不能夠确保source所在重疊區域在拷貝之前不被覆蓋。而使用memmove可以用來處理重疊區域。函數返回指向destin的指針。
2.如果目标數組destin本身已有數據,執行memcpy()後,将覆蓋原有數據(最多覆蓋n)。如果要追加數據,則每次執行memcpy後,要将目标數組地址增加到你要追加數據的地址。
注意:source和destin都不一定是數組,任意的可讀寫的空間均可。
區别
strcpy和memcpy主要有以下3方面的區别。
1、複制的内容不同。strcpy隻能複制字符串,而memcpy可以複制任意内容,例如字符數組、整型、結構體、類等。
2、複制的方法不同。strcpy不需要指定長度,它遇到被複制字符的串結束符"0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定複制的長度。
3、用途不同。通常在複制字符串時用strcpy,而需要複制其他類型數據時則一般用memcpy。