中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

memcpy和memmove的區別

發布時間:2020-05-26 05:03:47 來源:網絡 閱讀:630 作者:I慕藍 欄目:編程語言

   memcpy和memmove()都是C語言中的庫函數,在頭文件string.h中,作用是拷貝一定長度的內存的內容,函數原型如下:

void *my_memcpy(void *dest, const void *src,size_t count)

void *my_memmove(void *dest, const void * src, size_t count)

他們的作用是一樣的,唯一的區別是,當內存發生局部重疊的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。



memcpy和memmove的區別

第一種情況下,拷貝重疊的區域不會出現問題,內容均可以正確的被拷貝。

第二種情況下,問題出現在右邊的兩個字節,這兩個字節的原來的內容首先就被覆蓋了,而且沒有保存。所以接下來拷貝的時候,拷貝的是已經被覆蓋的內容,顯然這是有問題的。

實際上,memcpy只是memmove的一個子集

memmove在copy兩個有重疊區域的內存時可以保證copy的正確,而memcopy就不行了,但memcopy比

memmove的速度要快一些,如:

char s[] = "1234567890";

char* p1 = s;

char* p2 = s+2;

memcpy(p2, p1, 5)與memmove(p2, p1, 5)的結果就可能是不同的,memmove()可以將p1的頭5個字符"12345"正確拷貝至p2,而memcpy()的結果就不一定正確了。

關于memmove的實現:

void *my_memmove(void *dest, const void * src, size_t count)

{

char *pDest = (char *)dest;

char *pSrc = (char *)src;

assert(dest);

assert(src);

if ((pDest >= pSrc) && (pDest <= pSrc + count))

{

while (count--)

{

*(pDest + count) = *(pSrc + count);

}

}

else//不重疊

{

while (count--)

{

*pDest++ = *pSrc++;

}

}

return dest;

}

關于memcpy的實現:

void *my_memcpy(void *dest, const void *src,size_t count)

{

assert(dest);

assert(src);

char *pDest = (char*)dest;

char *pSrc = (char*)src;

if ((pDest >= pSrc) && (pDest <= pSrc + count))

{

while (count--)

{

*(pDest + count) = *(pSrc + count);

}

}

else

{

while (count--)

{

*pDest++ = *pSrc++;

}

}

return dest;

}


 





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

额尔古纳市| 屏东县| 西安市| 蒙山县| 株洲市| 山阳县| 康平县| 中山市| 隆子县| 皮山县| 佛教| 邢台市| 新建县| 舞阳县| 中方县| 栖霞市| 砀山县| 阿瓦提县| 洛川县| 布尔津县| 乐昌市| 新绛县| 策勒县| 宜黄县| 东乡| 集安市| 禄丰县| 海淀区| 安多县| 方山县| 克东县| 马龙县| 海原县| 绍兴县| 鄢陵县| 民和| 湛江市| 丰宁| 汉阴县| 宣汉县| 钟山县|