memset函式的用法

2021-08-06 06:06:29 字數 1626 閱讀 3962

memset

函式的用法:

1.

預備知識:1個

int佔

4個位元組,

1個位元組佔

8bit

(位),

1個位元組佔

1個記憶體;

-1的二進位制是

1111 1111

,而不是

1000 0001

,因為負數在計算機中是以補碼形式儲存的。 -1

的原碼:

1000 0001 -1

的反碼:

1111 1110 -1

的補碼:

1111 1111

正數的反碼和原碼相同,補碼和原始碼也相同;

負數的反碼是符號位不變,其餘逐位取反,補碼是其反碼的末位加1;

2.memset

(目標起始位址,要賦的值,位元組數)以

位元組為單位

初始化記憶體塊

intnum[10];

memset(num,0,10*sizeof(int));

3.

錯誤的賦值

memset(num,1,10*sizeof(int));//為1個int的每個位元組賦值為1,則最後結果不為1

00000001 00000001 00000001 00000001

memset(void*s, int ch,size_t

n);中key實際範圍應該在0~~255,因為該函式只能取ch的後八位賦值給你所輸入的範圍的每個位元組,比如int a[5]賦值memset(a,-1,sizeof(int)*5)與memset(a,511,sizeof(int)*5) 所賦值的結果是一樣的都為-1;因為-1的二進位製碼為(1111111111111111 11111111 11111111)而511的二進位製碼為(00000000 00000000 00000001 11111111)後八位都為(11111111),所以陣列中每個位元組,如a[0]含四個位元組都被賦值為(11111111),其結果為a[0](1111111111111111 11111111 11111111),及a[0]=-1,因此無論ch多大只有後八位二進位制有效,而八位二進位制

[2] 的範圍(0~255)ykq改。而對字元陣列操作時則取後八位賦值給字元陣列,其八位值作為ascii

[3] 碼。

char buffer[20];

memset(buffer,0,sizeof(char)*20);

memcpy(buffer,"123",3);

//這一條的memset並不多餘,memcpy並沒把buffer全部覆蓋,如果沒有memset,

//用printf列印buffer會有亂碼甚至會出現段錯誤。

//如果此處是strcpy(buffer,"123");便不用memset,

//strcpy雖然不會覆蓋buffer但是會拷貝字串結束符

注意:

在給char

以外的陣列賦值時,只初始化為0或

-1

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個 位元組替換為...