memset 函式詳解(標記備忘)

2021-05-26 08:17:33 字數 1316 閱讀 2623

#include
void *memset( void *buffer, int ch, size_t count );

功能: 函式拷貝ch 到buffer 從頭開始的count 個字元裡, 並返回buffer指標。 memset() 可以應用在將一段記憶體初始化為某個值。例如:

memset( the_array, '/0', sizeof(the_array) );
這是將乙個陣列的所以分量設定成零的很便捷的方法。

簡單示例:

也不一定就是把內容全部設定為ch指定的ascii值,而且該處的ch可為int或者其他型別,並不一定要是char型別。例如下面這樣:

int array[5] = ;

for(int i = 0; i < 5; i++)

coutfor(int k = 0; k < 5; k++)

cout1 4 3 5 2

0 0 0 0 0

後面的表大小的引數是以位元組為單位,所以,對於int或其他的就並不是都乘預設的1(字元型)了。而且不同的機器上int的大小也可能不同,所以最好用sizeof()。

要注意的是,memset是對位元組進行操作!

所以上述程式如果改為

int array[5] = ;

for(int i = 0; i < 5; i++)

coutfor(int k = 0; k < 5; k++)

cout1 4 3 5 2

16843009 16843009 16843009 16843009 16843009

為什麼呢?

因為memset是以位元組為單位就是對array指向的記憶體的4個位元組進行賦值,每個都用ascii為1的字元去填充,轉為二進位制後,1就是00000001,佔乙個位元組。乙個int元素是4位元組,合一起就是00000001000000010000000100000001,就等於16843009,就完成了對乙個int元素的賦值了。

所以用memset對非字元型陣列賦初值是不可取的!

例如有乙個結構體some x,可以這樣清零:

memset( &x, 0, sizeof(some) );

如果是乙個結構體的陣列some x[10],可以這樣:

memset( x, 0, sizeof(some)*10 );

以下是看lemur中termcache時遇到memset(_cacheterm,0xff,sizeof(_cacheterm))記憶體初始化後,hashtable中termid初始為-1原因,測試如下(未給出hashtable,只是測試結構體caheterm[cache_size]的初始化:

memset函式詳解

1.原型 void memset void s,int c,size t n 2.功能 將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。3.用法 include c語言庫函式 4.例子 include void main 5.說明 memset 函式常用於記憶體空間初始化。如 char s...

memset函式詳解

c 語言中memset函式詳解 功 能 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作 用 法 void memset void s,char ch,unsigned n 程式例 include inc...

memset函式使用詳解

今天做題卡在memset函式的使用上了,本來以為int a 100 memset a,max,sizeof a 就是將a陣列全部賦值為max,現在才知道他的填充是以位元組為單位,一般用於對字元型變數的初值進行賦值.1。void memset void s,int c,size t n 總的作用 將已...