1.memset函式原型
總的作用:將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。(注意:會去修改記憶體得值,如果記憶體是唯讀,使用memset會出錯)
重點需要注意乙個細節:memset是以byte來填充的,也就是乙個位元組(8bit)乙個單位來填充。
因此:如果int array[10]; memset(array, 1, 10);然後再把array的值列印出來,會得到乙個錯誤的值。因為int是4個位元組,因此再int型別中1的表現形式為「00000000000000000000000000000001」,然後將這32位填充1個byte中,高位被捨棄,也就是「00000001」,然後再填充一次就變成「0000000100000001」。那麼array[0]其實在記憶體中儲存的就是「00000001000000010000000100000001」。
2.示例
例1:memset是以位元組為單位進行填充的
通過以上簡單得例程,編譯執行後理論上我們想要得得到得結果是array[0] = 1。
實際上:
將int array[10];
修改成:
結果就是我們想要得。
例2:memset會去修改記憶體中的值,去修改唯讀記憶體會造成段錯誤
執行結果:
因為char *s = 「zhuangquan」是字元指標指向字串常量。
c語言中定義為常量的值,是不允許被修改的,這是乙個規則。如果有修改需求,就不要定義為常量,而是定義為變數。
在執行時,常量字串會被儲存在靜態儲存區,這段空間的特性就是唯讀的,任何修改屬操作,均會引起整個程式崩潰。這也是c語言保證常量不可修改的乙個手段。
(用const int i定義出來的也是常量,define定義的也是常量。包括『a』以及ascii表裡面的以及0x01這些都是常量。都屬於唯讀)
將*s修改成s就可以了
執行結果:
3.memset的函式實現
C函式之memset 函式用法
c函式之memset 函式用法 1.功能 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作,其返回值為指向s的指標 2.需要的標頭檔案 or 3.函式原型 void memset void s,int c...
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...