程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言模擬實現memcpy,memmove函數

C語言模擬實現memcpy,memmove函數

編輯:關於C
 這裡memcpy與memmove函數的模擬實現,需要用到空指針來傳遞參數,之後強制類型轉換為char型,用size_t這個宏接受偏移量進行偏移,模擬實現如下:     memcpy函數:  
void* my_memcpy(void*dst,const void*src ,size_t count)
{
assert(dst);
assert(src);
void* ret = dst;
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
return ret;
}

 

      memmove函數:     memmve函數是為了避免memcpy函數出現的內存重疊(上篇提到過),而開發的新函數,思想就是,如果有內存重疊的情況,那我們從後向前拷貝,如果沒有,就如memcpy一樣,從前向後拷貝,實現代碼如下:  
void* my_memmove(void*dst, const void*src, size_t count)
{
assert(dst);
assert(src);
void*ret = dst;
if ((char*)dst > ((char*)src + count))//判斷是否內存重疊
{
while (count--)
{
*((char*)dst + count) = *((char*)src + count);
}
}
else
{
while (count--)
{
*(char*)dst = *(char*)src;
dst = (char*)dst + 1;
src = (char*)src + 1;
}
}
return ret;
}

 

      進行內存拷貝,比字符串拷貝要多傳遞一個拷貝偏移量的參數,因為字符串拷貝往往是遇到0就停止拷貝,而內存拷貝不存在此類問題,運用這兩類函數需要思考怎樣才能高效地讓程序運行。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved