C/C++---memset、memcpy、memcmp函數簡介

1、頭文件

C語言:#include<string.h>

C++:#include<cstring>

2、memset

函數原型

void * memset(void * Dst, int Val, size_t Size);

函數的功能:在一段內存塊中填充某個給定的值,它是對較大的結構體數組進行清零操作的一種最快方。

注意事項

第一:memset函數按字節對內存塊進行初始化,所以不能用它將int數組初始化爲0和-1之外的其他值(除非該值高字節和低字節相同)。

第二:函數中Val實際範圍應該在0~~255,因爲該函數只能取ch的後八位賦值給你所輸入的範圍的每個字節,比如int a[5]賦值memset(a,-1,sizeof(int )*5)與memset(a,511,sizeof(int )*5) 所賦值的結果是一樣的都爲-1;因爲-1的二進制碼爲(11111111 11111111 11111111 11111111)而511的二進制碼爲(00000000 00000000 00000001 11111111)後八位都爲(11111111),所以數組中每個字節,因此無論ch多大隻有後八位二進制有效,而後八位二進制的範圍在(0~255)中。

3、memcpy

函數原型

void * memcpy(void * Dst,const void * Src,size_t Size);

函數的功能:從源內存地址的起始位置開始拷貝Size個字節到目標內存地址中,即從源Src中拷貝n個字節到目標Dst中。

注意事項:

1.source和destin所指的內存區域可能重疊,但是如果Src和Dst所指的內存區域重疊,那麼這個函數並不能夠確保source所在重疊區域在拷貝之前不被覆蓋。而使用memmove可以用來處理重疊區域。函數返回指向Dst的指針。

2.如果目標數組Dst本身已有數據,執行memcpy()後,將覆蓋原有數據(最多覆蓋Size)。如果要追加數據,則每次執行memcpy後,要將目標數組地址增加到你要追加數據的地址。

注意:Src和Dst都不一定是數組,任意的可讀寫的空間均可

4、memcmp

函數原型

int memcmp(const void * Buf1,const void * Buf2,size_t Size);

函數的功能:把存儲區 Buf1和存儲區 Buf2 的前 Size 個字節進行比較,該函數是按字節比較的。

返回值 < 0

Buf1小於 Buf2

返回值 > 0

Buf2 小於 Buf1

返回值 = 0

Buf1等於 Buf2

4、memmov

void * memmove(void * Dst, const void * Src, size_t Size);

函數的功能:用於拷貝字節,如果目標區域和源區域有重疊的話,memmove能夠保證源串在被覆蓋之前將重疊區域的字節拷貝到目標區域中,但複製後源內容會被更改。但是當目標區域與源區域沒有重疊則和memcpy函數功能相同。

發佈了60 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章