memcpy与strcpy的区别:
1,用途不同:strcpy主要用来字符串拷贝,memcpy主要是其他类型的拷贝;
2,使用方式不同:strcpy是遇到‘\0’停止,memcpy是根据第三个参数来决定拷贝内容;
memmove:
原型:void memmove( void dest, const void* src,size_t count );
用途:从src的count个字符拷贝到dest
这里需要注意src与dest的位置关系,从而确定是正向拷贝还是反向拷贝。
实现:
//strcpy
char* strcpy(char* dest,const char* src)
{
if ((dest == NULL) || (src == NULL))
return NULL;
char* strdest = dest;
while (*src != '\0')
*strdest++ = *src++;
return strdest;
}
//memcpy
void* memcpy(void* dest,const void* src,size_t count)
{
if (dest == NULL || src == NULL)
return NULL;
char* tempDest = (char*)dest;
char* tempSrc = (char*)src;
while (count--)
*tempDest++ = *tempSrc++;
return dest;
}
//memmove
void* Mymemmove(void* dest, void* src,size_t count)
{
assert(dest != NULL && src != NULL);
char* mydest = (char*)dest;
char* mysrc = (char*)src;
char* ret = (char*)dest;
if (mydest <= mysrc || mydest >= mysrc+count) //正向
{
while (count--)
*mydest++ = *mysrc++;
}
else
{
mydest += count - 1;
mysrc += count - 1;
while (count--)
*mydest-- == *mysrc--;
}
return ret;
}