須要的頭文件:#include <string.h>
c++
原型: 數組
extern void* memcpy(void *dest, const void *src, size_t n); //If copying takes place between objects that overlap, the behavior is undefined
功能:由src指向地址爲起始地址的連續n個字節的數據複製到以destin指向地址爲起始地址的空間內。 函數
注意: 測試
4.標準庫函數提供了地址重疊時的內存拷貝函數:memmove()由於memmove()函數把源字符串拷貝到臨時buf裏,而後再從臨時buf裏寫到目的地址,增長了一次沒必要要的開銷,可是能夠解決內存重疊拷貝問題。 spa
#include<stdio.h> #include<stdlib.h> #include<string.h> void *memcpy(void *dst,const void *src,size_t size); int mian(int argc,char *argv[]) { char buf[100]="abcdefgh"; Memcpy(buf+2,buf,5);//memcpy(buf+2,buf,5); printf("%s\n",buf+2); } //若是函數的參數能夠是任意類型指針,那麼應聲明其參數爲void * void *Memcpy(void *dst,const void *src, size_t size) { char *psrc; char *pdst; if(dst == NULL|| src == NULL) return NULL; if((src<dst)&&(char*)src+size>(char*)dst)//src和dst內存重疊,則自後向前拷貝 { psrc = (char*)src+size-1; pdst = (char*)dst+size-; while(size--) { *pdst-- = *psrc--; } } else { psrc = (char*)src; pdst = (char*)dst; while(size--) { *pdst++ = *psrc++; } } return dst; }
PS:size_t 類型定義在cstddef.h頭文件中,該文件是C標準庫的頭文件stddef.h的C++版。它是一個與機器相關的unsigned類型,其大小足以保證存儲內存中對象的大小。 指針
在C++中,size_t的引入加強了程序在不一樣平臺上的可移植性。size_t是針對系統定製的一種數據類型,通常是整型,由於C/C++標準只定義最低的位數,而不是必需的固定位數。並且在內存裏,對數的高位對齊存儲仍是低位對齊存儲各系統都不同。固然,有些是編譯器或系統已經給定義好的。經測試發現,在32位系統中size_t是4字節的,而在64位系統中,size_t是8字節的,這樣利用該類型能夠加強程序的可移植性。
code
關於void* :若是函數的參數能夠是任意類型指針,那麼聲明其參數爲void*; 對象
典型的如內存操做函數memcpy和memset的函數原型分別爲: 內存