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;
}