strcpy
// 检查内存重叠
char* strcpy(char *dst, const char *src) //const约束,内容不可变
{
assert((src != NULL) && (dst != NULL)); //参数非0检验
size_t size = strlen(src);
if (src < dst && src + size > dst) { // 内存重叠
// 从后向前复制
char *pSrc = src + size - 1;
char *pDst = dst + size - 1;
while (*pDst-- = *pSrc--) {
/* 空 */
}
} else {
char *pSrc = src;
char *pDst = dst;
while (*pDst++ = *pSrc++) {
/* do nothing */
}
}
return dst;
}