memcpy的函式內部實現

2021-06-16 07:44:21 字數 841 閱讀 5093

memcpy和memmove函式的實現,需要注意memmove的覆蓋問題,還有指標型別需要考慮。下面的例子中,先給出了錯誤的例子,而後給出了正確的例子,引以為戒!

區別:兩個函式都是進行n位元組記憶體內容的拷貝,入口引數和返回引數也都一樣,可是這兩個函式在內部實現上是有一定區別的,這主要是因為dest記憶體區域和src記憶體區域可能有一下四種不同的情況,注意count的影響:

src的記憶體區域和dest的記憶體區域相對位置和重疊關係有四種情況,memcpy沒有考慮重疊的情況,而memmove考慮到了全部情況,因此memcpy函式的時候可能出現意向不到的結果。

這兩個函式的實現:

***********下面兩個是錯誤的實現**************

void* memcpy(void* dest, void* source, size_t count)

void* memmove(void* dest, void* source, size_t count)

void* ret = dest;

if (dest <= source || dest >= (source + count))

//copy from lower addresses to higher addresses

while (count --)

*dest++ = *source++;                   

} else  

return ret;

}      

void *my_memmove(void *dst,const void *src,int count)

}else

}return(ret);

}

memcpy函式的實現

前段時間去面試自己比較喜歡的乙個工作,面試的哥們讓我實現void memcpy void to,const void from,size t count 這個函式。沒做出來,掛了。感到非常不爽。回來研究了一下。找著了幾個不同版的實現,貼出來。首先對這個函式做一些說明。include void mem...

memcpy函式實現

1.原型 void memcpy void dest,const void src,size t size 標頭檔案 include 功能 由src所指記憶體區域複製size個位元組到dest所指記憶體區域。memcpy 時就需要考慮位址 重疊的情況。2.記憶體布局情況 1 源位址和目的位址不重疊 ...

memcpy 函式實現

memcpy函式的作用 將由src指向位址為起始位址的連續n個位元組的資料複製到以dest指向位址為起始位址的空間內,函式返回乙個指向dest的指標。想必大多數人在面試時被要求寫 memcpy的實現,很不幸,我也吃過這個虧 這種題要是寫的一塌糊塗後面完全沒戲 所以還是得提前準備一下,不然就只能呵呵了...