##strcpy & memcpy
这两个库函数的实现应该算是比较简单的,但是竟然看到了很多不正确的版本,其实只要注意以下几点就OK了
- 参数判断
- 返回指针临时保存
- 地址重叠判断
- '\0'复制
char* MemCpy(char* dst, const char* src, int len){
assert( dst != nullptr );
assert( src != nullptr );
char* ret = dst;
//from left to right -> ->
if(dst <= src || dst >= (src + len)){
while(len--){
*dst++ = *src++;
}
}
//address overlapping
//down sequence <-<-
else{
dst = dst + len - 1;
src = src + len - 1;
while(len--){
*dst-- = *src--;
}
}
return ret;
}
char* StrCpy(char* dst, const char* src){
assert( dst != nullptr );
assert( src != nullptr );
return MemCpy(dst,src,strlen(src)+1);
}