在strcpy函数中需要注意导入的形参dst,src不能有内存重叠。(尤其注意dst不能处在src字符串的内存中间,否则拷贝的时候会替换到src原有的结束字符,最终导致src字符串无结束字符,一直拷贝下去导致程序崩溃)
char *my_strcpy(char *dst,char *src)
{
char *_src = NULL;
char *_dst = NULL;
int len = strlen(src);
if(dst>src && dst < src + len) //dst内存处于src字符串内存中间,不能正向拷贝(原因见上述说明)。结果会影响到src源字符串
{
_src = src + len;//到最后的\0字符
_dst = dst + len;
while(len >= 0) //=0 走到下标0的字符
{
*_dst-- = *_src--;
len--;
}
}
else
{
_src = src;
_dst = dst;
while(len >= 0) //len:1-len,现在放宽一位0-len,表示从下标0-下标len,包括了\0字符
{
*_dst++ = *_src++; // \0
len--;
}
}
return dst;
}
int main()
{
char a[20] = "123456789";
char b[20] = {0};
char *src,*dst;
src = a;
dst = a+5;
my_strcpy(dst,src);//dst,src内存重叠
my_strcpy(b,src); //b,src内存无重叠
printf("%s\n",src);
printf("%s\n",b);
return 0;
}