關於memcpy函式

2021-04-18 17:06:29 字數 1512 閱讀 2553

一朋友問我memcpy如何寫? 初時感到愕然,c庫中不是有嗎? 後來才知道原來是某公司考題。檢視了一下要求,呵呵,要求的已經不是原來的memcpy函式了。嘗試寫出,歡迎高手拍磚:

#define  n  4

#pragma pack(n)

void *memcpyy(void* dest,const void* src,size_t n)

//判斷初始指標  

assert((null != dest)&&(null != src));

if (0 == n)

if(dest == src)  

//保護原指標不動  

byte *pd = (byte*)dest;  

const byte *ps = (const byte*)src;

size_t i,num,residue;

// 相比源指標,目標指標在低位,此時可能發生重疊,由高位到低位逆序拷貝

if (dest>src)

pd += n-1;   ps += n-1;   

for (i=0;iif (0 == (size_t)pd%n)  

break;    

*pd-- = *ps--;   

pd -= 3;  

ps -= 3;

num = (n-i)/n;   

residue = (n-i)%n;   

size_t *pdest = (size_t*)pd;   

size_t *psrc = (size_t*)ps;   

while(num--)  

*pdest-- = *psrc-- ;  

if (0 != residue)   

pd = (unsigned char*)(++pdest) - 1;    

ps = (const unsigned char*)(++psrc) - 1;  

for (i=residue;i>0;i--)  

*pd-- = *ps-- ;  

// 相比源指標,目標指標在高位,此時由低位到高位順序拷貝就可

else

for (i=0;iif (0 == (size_t)pd%n)   

break;   

*pd++ = *ps++ ;   

num = (n - i )/n;   

residue = (n - i)%n;   

size_t* pdest = (size_t*)pd;   

size_t* psrc = (size_t*)ps;  

while (num--)   

*pdest++ = *psrc++ ;  

if (0 != residue)  

pd = (unsigned char*)pdest;   

ps = (const unsigned char*)psrc;   

for (i=0;i*pd++ = *ps++;  

return dest;

關於strcpy與memcpy函式的位址重疊問題

大家一般認為名不見經傳strcpy函式實現不是很難,流行的strcpy函式寫法是 cpp view plain copy char my strcpy char dst,const char src 如果注意到 1,檢查指標有效性 2,返回目的指標des 3,源字串的末尾 0 需要拷貝。寫出上面實現...

memcpy函式用法

函式原型 void memcpy void dest,void src,unsigned int count memcpy 函式用於 把資源記憶體 src所指向的記憶體區域 拷貝到目標記憶體 dest所指向的記憶體區域 size變數控制拷貝的位元組數 用法 1 可以拷貝任何型別的物件,因為函式的引數...

memcpy函式介紹

原型 extern void memcpy void dest,void src,unsigned int count 用法 include 功能 由src所指記憶體區域複製count個位元組到dest所指記憶體區域。說明 src和dest所指記憶體區域不能重疊,函式返回指向dest的指標。舉例 m...