一、区别
(1)内容:strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等
(2)方法:strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度
(3)用途:通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
二、实现(编程风格;出错处理;算法复杂度分析(用于提高性能))
(1)注意编程风格。比如,使用dst、src这样增强可读性的名字。
(2)使用断言来检验输入参数的有效性。
(3)使用const来约束src,表明src对应的内容不能被修改。
(4)返回dst,以便实现链式表达式这样的机制。
char *strcpy(char *strDest, const char *strSrc);
{ //使用断言来检验输入参数的有效性。
char *address = strDest;
while((*strDest++ = * strSrc++) != ‘\0’ );
return address ;
}
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;
}