c語言深入淺出(一)strcpy和memcpy的區別
strcpy和memcpy都是c語言的庫函數
strcpy:只用于字符串的復制,當碰到‘\0’就停止了
memcpy:用于這個內存的拷貝,適用于結構體、字符數組、類等
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復制字符串,遇到‘\0’就停止了,memcpy拷貝內存
- 復制方法:strcpy沒有指定大小的參數,可能導致內存溢出