strcpy函数实现将源地址的字符串,拷贝到目的地址,并且返回指向目的地址的指针;
原型为:char *strcpy(char *dst, const char *src);
一般我们会比较容易的实现,而不考虑内存重叠;
char* strcpy(char* dest,const char* src)//注意src参数有const限定符,防止被修改
{
assert(dst != NULL && src != NULL);
if(dest==src)
return src;
char* address=dest;
while((*dest++=*src++)!='\0') ;
*dest='\0';
return address;
}
但是还会有内存重叠的情况出现,例如:
char s[10]="hello";
strcpy(s, s+1); //应返回ello,
strcpy(s+1, s); //应返回hhello,但实际会报错,因为dst与src重叠了,把'\0'覆盖了
考虑内存重叠的代码可写为:
char* strcpy(char* dest,const char* src)//注意src参数有const限定符,防止被修改
{
assert(dest && src);
char* address=dest;
if(dest>=src && dest<=src+strlen(src))//发生重叠
{
int cnt=strlen(src);
dest=dest+cnt-1;
src=src+cnt-1;
while(cnt--)
{
*dest--=*src--;
}
*(dest+cnt)='\0';
}
else
{
while(cnt--)
*dest++=*src++;
*dest='\0';
}
}