void *memset(void *s, int ch, size_t n);
函式解釋:將s中當前位置後面的
n個位元組
(typedef unsigned int size_t)
用 ch
替換並返回s。
memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法
,總的作用:將已開闢記憶體空間s 的首
n 個位元組的值設為
值(非數值型字元
) c。
例如:1、 char a[20];
memset(a,0,20*sizeof(char));//char a[20]清零
2、 char buffer="helloworld\n";
printf("buffer before memset:%s\n",buffer);
memset(buffer,'*',strlen(buffer));
printf("buffer after memset:%s\n",buffer);
輸出結果:
buffer before memset:helloworld
buffer after memset:***********
3、 int array[5]=;
for(int i=0;i<5;i++)
cout0是不行的,因為用
memset
對非字元型陣列賦初值是不可取的
for(int k=0;k<5;k++)
cout4、typedef struct
char classname[30];
int stu;
}classinfo;
classinfo info;
memset(&info,0,sizeof(classinfo));//清零
如果是classinfo info[10]
memset(&info,0,10*sizeof(classinfo));//清零 5、
memset()
函式常用於記憶體空間初始化。如:
char str[100];
memset(str,0,100); 6、
memset
可以方便的清空乙個結構型別的變數或陣列。
struct sample_struct
char csname[16];
int iseq;
int itype;
對於變數
struct sample_struct sttest;
一般情況下,清空sttest的方法:
sttest.csname[0]=;
sttest.iseq=0;
sttest.itype=0;
用memset就非常方便:
memset(&sttest,0,sizeof(structsample_struct));
如果是陣列:
structsample_struct test[10];
則memset(test,0,sizeof(structsample_struct)*10);
另外:如果結構體中有陣列的話還是需要對陣列單獨進行初始化處理的。
注意:1、不要過度使用
memset 例如
char buffer[4];
memset(buffer,0,sizeof(char)*4);
strcpy(buffer,"123");
//"123"中最後隱藏的
'\0'
佔一位,總長4位。
這裡的memset是多餘的
. 因為這塊記憶體馬上就被全部覆蓋,清零沒有意義.
2、以下情況並不多餘,因某些編譯器分配空間時,記憶體中預設值並不為0:
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
但是會拷貝字串結束符
memset 函式的使用
語言 c c 標頭檔案 或 函式原型 void memset void ptr,int value,size t num 注 ptr 指向要填充的記憶體塊的指標。value 要設定的值。該值作為int傳遞,但該函式使用該值的unsigned char轉換填充記憶體塊。num 要設定為值的位元組數。解...
memset( 函式的使用
在前面不止一次說過,定義變數時一定要進行初始化,尤其是陣列和結構體這種占用記憶體大的資料結構。在使用陣列的時候經常因為沒有初始化而產生 燙燙燙燙燙燙 這樣的野值,俗稱 亂碼 每種型別的變數都有各自的初始化方法,memset 函式可以說是初始化記憶體的 萬能函式 通常為新申請的記憶體進行初始化工作。它...
memset函式使用
1 void memset void s,int c,size t n 總的作用 將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。2 memset可以方便的清空乙個結構型別的變數或陣列。如 struct sample struct 對於變數 struct sample strcut stt...