#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 總的作用 將已...