Mem系列函數(shù)介紹及案例實(shí)現(xiàn)
昨天導(dǎo)師甩給我們一個項目案例,讓我們自己去看一看熟悉一下項目內(nèi)容,我看到了這個項目里面大量使用memset(sBuf,0,sizeof(sBuf));這一塊內(nèi)存填充的代碼,于是回想起以前查過Mem系列函數(shù)的具體用法。整理整理。
函數(shù)名稱: memset
函數(shù)原型: void *memset(void *s, int ch, size_t n);
函數(shù)功能: 在一段內(nèi)存塊中填充某個給定的值,是對較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的最快方法。
函數(shù)返回: void
參數(shù)說明: void *s — 待初始填充的內(nèi)存首地址
int ch — 待填充的ASCII碼
size_t n — 待初始化填充的字節(jié)個數(shù)

補(bǔ)充:不要對結(jié)構(gòu)體使用memset賦非0以外的值,這很有可能會使得結(jié)構(gòu)體內(nèi)部的結(jié)構(gòu)被破壞。
函數(shù)名稱: memcpy
函數(shù)原型: void *memcpy(void *dest, const void *src,size_t n);
函數(shù)功能: 內(nèi)存區(qū)段拷貝;將src指向內(nèi)存地址的連續(xù)N個指針位置的內(nèi)容拷貝至dest指針指向的位置
函數(shù)返回: void
參數(shù)說明: dest — 目的內(nèi)存空間指針
src — 源內(nèi)存空間指針
n — 拷貝指針位置個數(shù)

補(bǔ)充:使用memcpy對一段內(nèi)存進(jìn)行替換的時候要保證前兩參數(shù)分別為目的地址和源地址或者指針
函數(shù)名稱: memmove
函數(shù)原型: void *memmove(void *dest, const void *src,size_t n);
函數(shù)功能: memmove用于從src拷貝n個單位長度到dest,如果目標(biāo)區(qū)域和源區(qū)域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區(qū)域的字節(jié)拷貝到目標(biāo)區(qū)域中,但復(fù)制后src內(nèi)容會被更改。但是當(dāng)目標(biāo)區(qū)域與源區(qū)域沒有重疊則和memcpy函數(shù)功能相同
(在我個人使用的過程中并沒發(fā)現(xiàn)過這兩個函數(shù)的區(qū)別 - -||| )(快回去把,別丟人了,菜是原罪 )
函數(shù)返回: void
參數(shù)說明: dest — 目的內(nèi)存空間指針
src — 源內(nèi)存空間指針
n — 移動指針位置個數(shù)

函數(shù)名稱: memcmp
函數(shù)原型: int memcmp (const void *S1, const void *S2, size_t size)
函數(shù)功能: 用于比較內(nèi)存數(shù)據(jù)S1與S2的前size個字符
函數(shù)返回: 從指針第一個字符開始比較,如果S1,S2完全相同返回0,如果S1[i]大于S2[i]則跳出返回-1,如果S1[i]小于S2[i]則跳出返回1
參數(shù)說明: S1—待比較內(nèi)存數(shù)據(jù)1
S2—待比較內(nèi)存數(shù)據(jù)2
size—比較內(nèi)存數(shù)據(jù)個數(shù)

函數(shù)名稱:_memicmp
函數(shù)原型:int _memicmp (const void *S1, const void *S2, size_t size)
函數(shù)功能:用于比較內(nèi)存數(shù)據(jù)S1與S2的前size個字符,如若相同,返回0
函數(shù)返回:如果S1,S2相同返回0,不相同返回兩個字符串第一個出現(xiàn)不同地方的字符差值
if(s1[i]!=s2[i]!) return s1[i]-s2[i];

補(bǔ)充:_memicmp不區(qū)分字母大小寫,主要用于英文字符判斷

浙公網(wǎng)安備 33010602011771號