memset函式及其用法

2021-09-11 01:27:25 字數 1027 閱讀 7821

每種型別的變數都有各自的初始化方法,memset() 函式可以說是初始化記憶體的「萬能函式」,通常為新申請的記憶體進行初始化工作。它是直接操作記憶體空間,mem即「記憶體」(memory)的意思。該函式的原型為:

# include void *memset(void *s, int c, unsigned long n);
函式的功能是:將指標變數 s 所指向的前 n 位元組的記憶體單元用乙個「整數」 c 替換,注意 c 是 int 型。s 是 void* 型的指標變數,所以它可以為任何型別的資料進行初始化。

memset() 的作用是在一段記憶體塊中填充某個給定的值。因為它只能填充乙個值,所以該函式的初始化為原始初始化,無法將變數初始化為程式中需要的資料。用memset初始化完後,後面程式中再向該記憶體空間中存放需要的資料。

memset 一般使用「0」初始化記憶體單元,而且通常是給陣列或結構體進行初始化。一般的變數如 char、int、float、double 等型別的變數直接初始化即可,沒有必要用 memset。如果用 memset 的話反而顯得麻煩。

當然,陣列也可以直接進行初始化,但 memset 是對較大的陣列或結構體進行清零初始化的最快方法,因為它是直接對記憶體進行操作的。

這時有人會問:「字串陣列不是最好用』\0』進行初始化嗎?那麼可以用 memset 給字串陣列進行初始化嗎?也就是說引數 c 可以賦值為』\0』嗎?」

可以的。雖然引數 c 要求是乙個整數,但是整型和字元型是互通的。但是賦值為 『\0』 和 0 是等價的,因為字元 『\0』 在記憶體中就是 0。所以在 memset 中初始化為 0 也具有結束標誌符 『\0』 的作用,所以通常我們就寫「0」。

memset 函式的第三個引數 n 的值一般用 sizeof() 獲取,這樣比較專業。注意,如果是對指標變數所指向的記憶體單元進行清零初始化,那麼一定要先對這個指標變數進行初始化,即一定要先讓它指向某個有效的位址。而且用memset給指標變數如p所指向的記憶體單元進行初始化時,n 千萬別寫成 sizeof§,這是新手經常會犯的錯誤。因為 p 是指標變數,不管 p 指向什麼型別的變數,sizeof§ 的值都是 4。

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