Mem系列函式介紹及案例實現

2022-04-17 10:21:13 字數 1790 閱讀 3287

昨天導師甩給我們乙個專案案例,讓我們自己去看一看熟悉一下專案內容,我看到了這個專案裡面大量使用memset(sbuf,0,sizeof(sbuf));這一塊記憶體填充的**,於是回想起以前查過mem系列函式的具體用法。整理整理。

函式名稱:   memset

函式原型:   void *memset(void *s, int ch, size_t n);

函式功能:   在一段記憶體塊中填充某個給定的值,是對較大的結構體或陣列進行清零操作的最快方法。

函式返回: void

引數說明: void *s — 待初始填充的記憶體首位址

int ch — 待填充的ascii碼

size_t n — 待初始化填充的位元組個數

補充:不要對結構體使用memset賦非0以外的值,這很有可能會使得結構體內部的結構被破壞。

函式名稱: memcpy

函式原型: void *memcpy(void *dest, const void *src,size_t n);

函式功能: 記憶體區段拷貝;將src指向記憶體位址的連續n個指標位置的內容拷貝至dest指標指向的位置

函式返回: void

引數說明: dest — 目的記憶體空間指標

src — 源記憶體空間指標

n — 拷貝指標位置個數

函式名稱: memmove

函式原型: void *memmove(void *dest, const void *src,size_t n);

函式功能: memmove用於從src拷貝n個單位長度到dest,如果目標區域和源區域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中,但複製後src內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函式功能相同

(在我個人使用的過程中並沒發現過這兩個函式的區別  - -||| )(快回去把,別丟人了,菜是原罪  )

函式返回: void

引數說明: dest — 目的記憶體空間指標

src — 源記憶體空間指標

n — 移動指標位置個數

函式名稱: memcmp

函式原型: int memcmp (const void *s1, const void *s2, size_t size)

函式功能: 用於比較記憶體資料s1與s2的前size個字元

函式返回: 從指標第乙個字元開始比較,如果s1,s2完全相同返回0,如果s1[i]大於s2[i]則跳出返回-1,如果s1[i]小於s2[i]則跳出返回1

引數說明: s1—待比較記憶體資料1

s2—待比較記憶體資料2

size—比較記憶體資料個數

函式名稱:_memicmp

函式原型:int _memicmp (const void *s1, const void *s2, size_t size)

函式功能:用於比較記憶體資料s1與s2的前size個字元,如若相同,返回0

函式返回:如果s1,s2相同返回0,不相同返回兩個字串第乙個出現不同地方的字元差值 

if(s1[i]!=s2[i]!) return s1[i]-s2[i];

補充:_memicmp不區分字母大小寫,主要用於英文本元判斷 

mem函式系列及舉例

分析 我們通過上面的例子,就可以看到字元0和數字0的區別,當用數字0替換的時候會把數字0轉義成斜槓0,所以第乙個例子中,當我們把前五個位元組換成數字0 的時候,轉譯成斜槓0,斜槓0是字串結束的標誌,所以什麼都不輸出。第二個我們用字元0去替換的時候,很顯然換成了字元0.因為第乙個程式的陣列a是字元 型...

模擬實現str系列和mem系列庫函式

1.實現strcpy 拷貝字串 char my strcpy char dest,const char src return ret 注意 strcpy會將 0也拷貝,但是需要注意目標位址有足夠的空間進行拷貝。2.實現strcat 字串追加。strcat也會把src的 0拷貝到末尾,需要保證空間足夠...

Mem庫函式模擬實現

本篇檢視 1 memset 2 memcpy 3 memmove 4 memcmp 5 memchr memset 功能 將一段記憶體初始化為某個值 函式拷貝ch 到buffer 從頭開始的count 個字元裡,並返回buffer指標。函式原型 void memset void buffer,int...