拷貝函式和記憶體操作拷貝

2021-07-11 07:55:36 字數 1552 閱讀 8386

關於幾個常見函式

strcpy,strncpy,memcpy,memmove;

那麼現在開始乙個乙個實現吧!

#include#include#include#include#define max 20
/*關於指標傳參時的斷言和const修飾的習慣有必要養成

比較常用的就是strcpy了;

需要注意的是dest必須有足夠的空間可以拷貝src中的字串;*/

char* my_strcpy(char *dest,const char *src)

return ret;

}

/*關於strcpy的缺陷大家應該有所了解,就是strcpy不會對越界進行檢查;

在strncpy中我會把這個缺陷彌補;

num為終止的引數;*/

>strncpy:

char* my_strncpy(char* dest,const char *src,int num)

if(*src!='\0')//當不完全拷貝時賦予dest字串結束的標誌;

*dest = '\0';

return dest;

}

strcpy 和 strncpy的區別僅僅是拷貝限制引數的區別

/*關於memcpy和memmove要詳細說明一下:

1.memcpy是把src 指向的物件中的n個字元拷貝

到dest 所指向的物件,返回指向結果物件的指標;

2.memmove 和 memcpy 函式在src和dest所指向內容不重疊是是一樣的;區別就在於

memmove可以把自己的一部分拷貝到自己的的另一部分。

3.共同點就是都是對記憶體的的拷貝,對其安全性不必做太多的考慮;

所以拷貝 '/0',null;都可以進行拷貝,對型別沒有要求;

都是以 n 為結束標誌並不是'/0';所以拷貝字串時慎用!*/

//這裡用void* 來定義引數,用 char* 強制轉換,實現一次讀乙個位元組;

//直接上**更暴力點!

>memcpy:

void* mymemcpy(void* dest,void*src,int num)//需要注意num不同情況的取值

return dest;

}

>memmove:memmove 考慮了兩個位址是否有重疊

舉個例子: dest指向"abcdef"的開始,src指向第三個字元'c',

要從src拷貝4個字元到dest中,如果正序拷貝勢必會把src的內容

修改,所以memmove提供倒序拷貝!

void* mymemmove(void* dest,void*src,int num)

}//如果位址沒有重合其實和memcpy是一樣的;

else }

return dest;

}int main()

到這裡就結束了,請大家指出不對的地方和可以優化的地方,我會多加改正!

謝謝!

字串拷貝和記憶體拷貝函式

strcpy 拷貝字串 定義函式 char strcpy char dest,const char src strcpy 函式只能拷貝字串。strcpy 函式將源字串src的每個位元組拷貝到目的字串dest中,src字串末尾的 0 也被拷貝過去。strcpy 函式返回引數dest的起始位址。如果引數...

記憶體拷貝函式 void memcpy

函式原型 void memcpy void dest,void src,int n 返回值 該函式返回乙個指向目標儲存區destin的指標。所需標頭檔案 c include cstring 應用說明 按照位元組 byte 拷貝實現的my memcpy void my memcpy void dst,...

C C 記憶體拷貝函式

1 char strcpy char dest,const char src 對字串有效,也會將src字串的 0 拷貝至目的字串中,所以在設定目的字串時注意分配合理的記憶體空間 2 char strncpy char dest,const char src,size t count 對字串有效,根據...