91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

普兰店市| 丰镇市| 水城县| 工布江达县| 淮北市| 鄂托克前旗| 霍邱县| 鸡西市| 南川市| 萝北县| 云浮市| 凤阳县| 余庆县| 呼图壁县| 红安县| 繁峙县| 泸西县| 宁蒗| 苍南县| 老河口市| 西吉县| 文安县| 宝应县| 邵阳市| 佛山市| 儋州市| 鄄城县| 丰城市| 鹤壁市| 抚松县| 曲沃县| 罗平县| 桓台县| 阳高县| 越西县| 商水县| 佛教| 内江市| 昌乐县| 虞城县| 玛多县|