【轉載】數組
memset 函數是內存賦值函數,用來給某一塊內存空間進行賦值的;函數
包含在<string.h>頭文件中,能夠用它對一片內存空間逐字節進行初始化;spa
原型爲 :指針
void *memset(void *s, int v, size_t n); xml
這裏s能夠是數組名,也能夠是指向某一內在空間的指針;blog
v爲要填充的值;內存
n爲要填充的字節數; get
例子:原型
struct data { char num[100]; char name[100]; int n; }; struct data a, b[10]; memset( &a, 0, sizeof(a) ); //注意第一個參數是指針類型,a不是指針變量,要加& memset( b, 0, sizeof(b) ); //b是數組名,就是指針類型,不須要加&
例2:string
char str[9];
咱們用memset給str初始化爲「00000000」,用法以下
memset(str,0,8);
注意,memset是逐字節 拷貝的。
例3:
int num[8];
咱們用memset給str初始化爲{1,1,1,1,1,1,1,1},
memset(num,1,8);//這樣是不對的
一個int是4個字節的,8個int是32個字節,因此首先要賦值的長度就不該該爲8而是32。
由於memset是 逐字節 拷貝,以num爲首地址的8字節空間都被賦值爲1,
即一個int變爲0X00000001 00000001 00000001 00000001,顯然,把這個數化爲十進制不會等於1的。
因此,在memset使用時要千萬當心,在給char之外的數組賦值時,只能初始化爲0或者-1。
(若是用memset(a,1,20);
就是對a指向的內存的20個字節進行賦值,每一個都用ASCII爲1的字符去填充,轉爲二進制後,1就是00000001,佔一個字節。一個INT元素是4字節,合一塊兒就是1000000010000000100000001,就等於16843009,就完成了對一個INT元素的賦值了。)
#include <memory.h> //我試了一下,C語言這麼用,C++還能夠用<cstring> #include <stdio.h> void main( void ) { char buffer[] = "This is a test of the memset function"; printf( "Before: %s\n", buffer ); memset( buffer, '*', 4 ); printf( "After: %s\n", buffer ); }
輸出:
Before: This is a test of the memset function
After: **** is a test of the memset function