一、区别
(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;}
本文详细对比了字符串复制函数strcpy与通用内存复制函数memcpy的区别,并提供了两者的实现代码样例,强调了正确使用的重要性。
881

被折叠的 条评论
为什么被折叠?



