strcpy和memcpy的區別
strcpy和memcpy都是標准C庫函數,它們有下面的特點。 strcpy提供了字符串的復制。即strcpy只用於字符串復制,並且它不僅復制字符串內容之外,還會復制字符串的結束符。
已知strcpy函數的原型是:char* strcpy(char* dest, const char* src); memcpy提供了一般內存的復制。即memcpy對於需要復制的內容沒有限制,因此用途更廣。
http://blog.csdn.net/gpengtao/article/details/7464061/(實現系統中strcpy函數)
char * strcpy(char * dest, const char * src) // 實現src到dest的復制 { if ((src == NULL) || (dest == NULL)) //判斷參數src和dest的有效性 { return NULL; } char *strdest = dest; //保存目標字符串的首地址 while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的內容復制到dest下 return strdest; }
void *memcpy(void *memTo, const void *memFrom, size_t size) { if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必須有效 return NULL; char *tempFrom = (char *)memFrom; //保存memFrom首地址 char *tempTo = (char *)memTo; //保存memTo首地址 while(size -- > 0) //循環size次,復制memFrom的值到memTo中 *tempTo++ = *tempFrom++ ; return memTo; }
strcpy和memcpy主要有以下3方面的區別。
1、復制的內容不同。strcpy只能復制字符串,而memcpy可以復制任意內容,例如字符數組、整型、結構體、類等。
2、復制的方法不同。strcpy不需要指定長度,它遇到被復制字符的串結束符"\0"才結束,所以容易溢出。memcpy則是根據其第3個參數決定復制的長度。
3、用途不同。通常在復制字符串時用strcpy,而需要復制其他類型數據時則一般用memcpy
簡述strcpy與memcpy的相同點和區別點
相同點:strcpy與memcpy都可以實現拷貝的功能
不同點:
(1)實現功能不同,strcpy主要實現字符串變量間的拷貝,memcpy主要是內存塊間的拷貝。
(2)操作對象不同,strcpy的操作對象是字符串,memcpy 的操作對象是內存地址,並不限於何種數據類型。
(3)執行效率不同,memcpy最高,strcpy次之。
原型: void *memmove( void* dest, const void* src, size_tcount );
#include<string.h>
由src所指內存區域復制count個字節到dest所指內存區域。
src和dest所指內存區域可以重疊,但復制后dest內容會被更改。函數返回指向dest的指針。
memmove的處理措施:
(1)當源內存的首地址等於目標內存的首地址時,不進行任何拷貝
(2)當源內存的首地址大於目標內存的首地址時,實行正向拷貝
(3)當源內存的首地址小於目標內存的首地址時,實行反向拷貝
void *mymemmove(void *dest,const void *src,size_t count) { char *ret=(char *)dest; char *dest_t=dest; char *src_t=(char *)src; assert( NULL !=src && NULL !=dest); if (dest_t<=src_t || dest_t>=src_t+count) { while(count--) { *dest_t++ = *src_t++; } } else { dest_t+=count-1; src_t+=count-1; while(count--) { *dest_t--=*src_t--; } } return ret; }