1、微软源码
char * strcpy(char * dst, const char * src)
{
char * cp = dst;
while(*cp++ = *src++);
return (dst);
}
Q:为什么多一步 char * cp = dst;的操作,并且返回dst?
A:因为虽然cp和dst内存是一样,但是经过赋值后cp所指向的并不是字符串的首部,而dst还指向字符串的首部。
2.内存重叠问题
如果源地址与目标地址冲突,有二种情况:
①如果src地址>dst地址,src从低地址到高地址赋值给dst。
②如果dst地址>src地址,src从高地址到低地址赋值给dst。
源码:
char* my_memcpy(char* _Dest, const char* _Source, int count) {
assert(NULL != _Dest);
assert(NULL != _Source);
if (NULL == _Dest || NULL == _Source)
return NULL;
char* ret = _Dest;
if (_Dest > _Source && _Dest < _Source + count) {
_Dest = _Dest + count - 1;
}
else {
while (count--) {
*_Dest++ = *_Source++;
}
}
return ret;
}