轉載:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html
strcpy與memcpy都是標準的C庫函數,strcpy提供了字符串的復制。即strcpy只用于字符串復制,并且它不僅復制字符串內容之外,還會復制字符串的結束符。
已知strcpy函數的原型是:char* strcpy(char* dest, const char* src);
memcpy提供了一般內存的復制。即memcpy對于需要復制的內容沒有限制,因此用途更廣。
void?*memcpy(?void?*dest,?const?void?*src,?size_t?count?);
char* strcpy(char* dest,const char*src)
{if (dest==NULL||src==NULL){return NULL;}char* pdest=dest;while((*dest++=*src++)!='\0');return pdest;
}
void* memcpy(void* dest,const void*src,size_t count)
{assert(dest!=NULL&&src!=NULL);char* pdest=(char*)dest;char* psrc=(char*)src;while(count-->0){*pdest++=*psrc++;}
return dest;
}
二者的區別在于:
1.復制的內容不同。strcpy只能用于字符串的復制,而memcpy可以復制任何內容,例如字符數組,整型,結構體,類等。
2.復制的方法不同。strcpy不需要指定復制的長度,一直復制到遇到字符串結束符\0結束,而memcpy則是根據第三個參數決定復制的長度。
3.用途不同。通常在復制字符串時用strcpy;而若復制其它類型數據,則一般用memcpy.