memcpy和memmove的區別在實現方面,memcpy是一個直接拷貝,如果兩個指針重疊,結果是未知的,下文是武林技術頻道小編和大家分享的深入理解memmove()與memcpy()的區別以及實現方法,一起來了解一下吧!

代碼如下所示:
?
?
?
// MemMove.cpp : 定義控制臺應用程序的入口點。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
?
?
?
void* memmove(void* dest, const void* src, size_t n)
{
?if (n <= 0)
?{
? cout << "Invalid count number." << endl;
?}
?if (dest == NULL || src == NULL)
?{
? cout << "The dest or src address is null." << endl;
?}
?if (dest == src)
?{
? cout << "The dest equals src." << endl;
?}
?if ((char*)dest <= (char*)src || (char*)dest >= (char*)src + n)
?{//對應圖中2,3,4三種情況,賦值過程中,src中未使用的不會被覆蓋
? char* de = (char*)dest;
? const char* sr = (const char*)src;
? while (n--)
? {
?? *de++ = *sr++;
? }
?}
?else
?{//對應圖中的第一種情況
? char* de = (char*)dest + n -1;
? const char* sr = (const char*)src + n - 1;
? while (n--)
? {
?? *de-- = *sr--;
? }
?}
?return dest;
}
?
?
?
void* memmcpy(void* dest, const void* src, size_t n)?
{?
? if (n <= 0)?
{?
? cout << "Invalid count number." << endl;?
}?
?if (dest == NULL || src == NULL)?
?{?
???? cout << "The dest or src address is null." << endl;?
?}?
?if (dest == src)?
?{?
?? cout << "The dest equals src." << endl;?
?}?
?char* de = (char*)dest;?
?const char* sr = (const char*)src;?
?while (n--)?
?{?
?? *de++ = *sr++;?
?}?
? return dest;?
}?
?
?
?
int _tmain(int argc, _TCHAR* argv[])
{
?char* p = "hello,world";?
?char dest[12] = {0};
?char *q = (char*)memmove(dest,p,5);
?cout << dest << endl;???
?cout << q << endl;?
?return 0;??
}
深入理解memmove()與memcpy()的區別以及實現方法就為各位朋友們介紹到這里了。大家可以在上文看到非常多優秀的文章,大家可以從武林技術頻道獲取全面的內容。