關於memset函式的用法

2021-06-26 01:15:02 字數 1174 閱讀 8214

函式原型:

void *memset(void *s, int c, size_t n);

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

1.如果用memset(a,1,20);

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

2.memset() 函式常用於記憶體空間初始化。如:

char str[100];

memset(str,0,100); 

3.補充:某人的一點心得

memset可以方便的清空乙個結構型別的變數或陣列。

如:struct sample_struct

;對於變數

struct sample_strcut sttest;

一般情況下,清空sttest的方法:

sttest.csname[0]='\0';

sttest.iseq=0;

sttest.itype=0;

用memset就非常方便:

memset(&sttest,0,sizeof(struct sample_struct));

如果是陣列:

struct sample_struct test[10];

則memset(test,0,sizeof(struct sample_struct)*10);

另外:如果結構體中有陣列的話還是需要對陣列單獨進行初始化處理的。

因為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 );

memset 函式用法

memset 原型 extern void memset void buffer,int c,int count 用法 include 功能 把buffer所指記憶體區域的前count個位元組設定成字元c。說明 返回指向buffer的指標。用來對一段記憶體空間全部設定為某個字元。舉例 char a ...

memset函式用法

樓主希望通過庫函式memset 來對乙個陣列進行初始化,需要了解一下該函式的工作原理。庫函式memset 是針對位元組操作的,其中第二個引數值被賦給第乙個引數指向的記憶體位址開始的每乙個位元組,因此,這種初始化其實存在侷限性,也導致其主要用於清除陣列內容等。比如 假設i 0,1,2,memset a...

memset函式用法

將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作,其返回值為指向s的指標。在c中 or 在c 中 void memset void s,int ch,size t n 函式解釋 將s中前n個 位元組替換為...