在面试中,实现strcpy函数是一个比较常见的考点,但是并不是每个人都能写的完全正确:
第一种写法:
char *my_strcpy(char *dst,const char *src)
{
assert(dst != NULL);
assert(src != NULL);
char *ret = dst;
while((* dst++ = * src++) != '\0')
;
return ret;
}
这种写法注意的了下面几点:
1)指针的有效性的判断
2)返回类型,使得调用参数后让然可以作为坐直,
3)‘\0\也需要复制
但是这种算法的缺陷是,没有考虑两个指针的内存地址重叠的情况,memcpy函数实现时考虑到了内存重叠的情况,可以完成指定大小的内存拷贝
下面是第二种写法,也是正确的写法: