strcpy函数
http://www.cnblogs.com/chenyg32/p/3739564.html
char * strcpy(char* dst, const char *src)
{
assert(dst!=NULL && src != NULL);
char *res = dst;
while((*dst++ = *src++)!='\0');
return res;
}
重点笔记:
1. src 使用 const 修饰,保护原变量;
2. 参数判空,保护程序;
3. 返回目标字符串地址;
4. 谨记字符串末尾的结束符 '\0';
5. 考虑内存重叠??????
内存重叠的拷贝函数:
char *strcpy(char *dst, const char*src)
{
assert(dst!=NULL && src!=NULL);
char *ret = dst;
my_memcpy(dst, src, strlen(src)+1);//重点:一定要长度+1,拷贝进去'\0'
return ret;
}
char * my_memcpy(char *dst, const char* src, int cnt)
{
assert(dst!=NULL && src != NULL && cnt>0);
char * ret = dst;
if (dst>=src && dst<=src+cnt-1)
{
dst = dst+cnt-1;
src = src+cnt-1;
while(cnt--)
{
*dst-- = *src--;
}
}
else
{
while(cnt--)
*dst++ = *src++;
}
return ret;
}
首先检测是否有重叠区域,若有的话从后往前赋值内容;否则正常从前往后赋值内容;
特别注意的是,当调用上述 my_memcpy 接口时谨记传入的字符串长度要包括末尾的'\0'字符

浙公网安备 33010602011771号