前段時間去面試自己比較喜歡的乙個工作,面試的哥們讓我實現void *memcpy(void *to, const void *from, size_t count)這個函式。沒做出來,掛了。感到非常不爽。回來研究了一下。找著了幾個不同版的實現,貼出來。
首先對這個函式做一些說明。
#include
void *memcpy(void *to, const void *from, size_t count)
函式memcpy()從from指向的陣列向to指向的陣列複製count個字元。如果兩陣列重疊,不定義函式的行為。
在c99中,to和from由restrict修飾。
先來看看微軟的實現:
void * __cdecl memcpy (
void * dst,
const void * src,
size_t count
)#else /* defined (_m_ia64) */
/** copy from lower addresses to higher addresses
*/while (count--)
#endif /* defined (_m_ia64) */
return(ret);
}再來看看coreutils中的實現:
void *
memcpy(void *destaddr, void const *srcaddr, size_t len)
再來看linux中實現:
void *memcpy(void *dest, const void *src, size_t count)
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的實現,很不幸,我也吃過這個虧 這種題要是寫的一塌糊塗後面完全沒戲 所以還是得提前準備一下,不然就只能呵呵了...
memcpy的函式內部實現
memcpy和memmove函式的實現,需要注意memmove的覆蓋問題,還有指標型別需要考慮。下面的例子中,先給出了錯誤的例子,而後給出了正確的例子,引以為戒!區別 兩個函式都是進行n位元組記憶體內容的拷貝,入口引數和返回引數也都一樣,可是這兩個函式在內部實現上是有一定區別的,這主要是因為dest...