linux中memset的正確用法

2021-07-05 21:02:36 字數 893 閱讀 5663

#include

//the memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.

//即對各種型別的陣列進行初始化,避免野值,注意是按位元組填充

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

//正確

char arr[10];

memset(arr,'a',10); // 由於char只佔乙個位元組(byte),因此函式的結果是將連續的10個位元組都填充為'a'。

//錯誤

int arr[10];

memset(arr,1,10);

原因:

(1)int佔4個位元組(byte),因此」1」對應的二進位制(32bits下)為」00000000 00000000 00000000 00000001」(4bytes),塞到1byte(8bit)的中,高位被捨棄了。這樣,填入陣列中的值是」00000001」。

然而總共有10 * 4 = 40byte,卻只有10個byte被填充,因此結果是」00000001……00000001**********」(前面總共10個」00000001」)。

因此,第乙個數是」0x01010101」=16843009(10進製),陣列其餘部分的值則是隨機值,讀取出來會是很離譜的數!

(2)如果採用 memset(arr,1,sizeof(arr));

就是將陣列的所有值都填充為」0x01010101」,也就是int陣列的初始值變為了16843009 !

(已失效)

linux中memset的正確用法

起因 希望對各種型別的陣列進行初始化,避免野值 函式標頭檔案 include void memset void s,int c,size t n 使用說明 the memset function fills the first nbytesof the memory area pointed to ...

linux中memset的正確用法

起因 希望對各種型別的陣列進行初始化,避免野值 函式標頭檔案 include void memset void s,int c,size t n 使用說明 the memset function fills the first nbytesof the memory area pointed to ...

memset 的正確用法

memset 位於標頭檔案string.h中,用法是將乙個位元組乙個位元組的設定為某個數.例如 memset a,0,sizeof a a為陣列,就是將a中的每乙個位元組都賦值為0。以前沒有正確理解memset 的用法,將陣列賦值為1時,用memset a,1,sizeof a 導致出現很怪的數字。...