在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; }