memset用法詳解

2021-06-06 09:09:24 字數 2818 閱讀 6890

memest

原型(please type "man memset" in your shell)

void

*memset(

void

*s,  

intc, size_t n);

memset:

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

常見的三種錯誤

第一

: 搞反了c 和

n的位置

.

一定要記住

如果要把乙個

char a[20]

清零, 

一定是memset(a, 0, 20) 

而不是memset(a, 20,  0) 

第二

: 過度使用

memset, 

我想這些程式設計師可能有某種心理陰影

, 他們懼怕未經初始化的記憶體

, 所以他們會寫出這樣的**

:

char

buffer[

20]; 

memset(buffer, 0, 

sizeof

((char

)*20

)); 

strcpy(buffer, 

"123"

); 

這裡的memset

是多餘的

. 因為這塊記憶體馬上就被覆蓋了

, 清零沒有意義. 

第三

: 其實這個錯誤嚴格來講不能算用錯

memset, 

但是它經常在使用

memset

的場合出現

intsome_func(

struct

something *a)

:為何要用

memset

置零?memset( &address, 0, sizeof(address))

;經常看到這樣的用法,其實不用的話,分配資料的時候,剩餘的空間也會置零的。

:1.如果不清空,可能會在測試當中出現野值。

你做下面的試驗看看結果

() 

char

buf[5]

;cstring str,str1;//

memset(buf,0,

sizeof

(buf))

;for

(int

i = 0;

i<5;

i++) 

trace(「%s/r/n「,str1)

2.

其實不然!特別是對於

字元指標型別的,剩餘的部分通常是不會為0的

,不妨作乙個試驗,定義乙個字元陣列,並輸入一串字元,如果不用

memset

實現清零,使用

messagebox

顯示出來就會有亂碼(0表示

null

,如果有,就預設字元結束,不會輸出後面的亂碼)

:

如下

demo

是可以的,能把陣列中的元素值都設定成字元

1

#include 

#include 

using

namespace

std;

intmain()

而,如下程式想吧陣列中的元素值設定成

1,卻是不可行的

#include 

#include 

using

namespace

std;

intmain()

問題是:

1

,第乙個程式為什麼可以,而第二個不行,

2,不想要用

for,或是

while

迴圈來初始化

int a[5];

能做到嗎?(有沒有乙個像

memset

()這樣的函式初始化)

:

1.因為第乙個程式的陣列

a是字元型的,字元型佔據記憶體大小是

1byte

,而memset

函式也是以位元組為單位進行賦值的,所以你輸出沒有問題。而第二個程式

a是整型的,使用

memset

還是按位元組賦值,這樣賦值完以後,每個陣列元素的值實際上是

0x01010101

即十進位制的

16843009

。你看看你輸出結果是否這樣? 2.

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

就是對a

指向的記憶體的

20個位元組進行賦值,每個都用

ascii為1

的字元去填充,轉為二進位制後,1就是

00000001,

佔乙個位元組。乙個

int元素是

4位元組,合一起就是

1000000010000000100000001

,就等於

16843009

,就完成了對乙個

int元素的賦值了。

memset用法詳解

原型 extern void memset void buffer,int c,int count 用法 i nclude 功能 把buffer所指記憶體區域的前count個位元組設定成字元c。說明 返回指向buffer的指標。舉例 memset.c i nclude i nclude main m...

memset用法詳解

1。void memset void s,int c,size t n 總的作用 將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。2。例子 include void main 3。memset 函式常用於記憶體空間初始化。如 char str 100 memset str,0,100 4。...

memset用法詳解

memest原型 pleasetype manmemset inyourshell void memset void s,intc,size tn memset 作用是在一段記憶體塊中填充某個給定的值,它對較大的結構體或陣列進行清零操作的一種最快方法。常見的三種錯誤 第一 搞反了c和n的位置.一定要...