memset函式的使用

2021-08-04 16:54:33 字數 2240 閱讀 8980

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...