記憶體初始化函式memset 用法詳解

2021-06-21 15:16:54 字數 1342 閱讀 7294

作用:在一段記憶體中填充某個給定的值,注意填充時是按照位元組順序填充的,而不是按照元素填充。

此方法是對較大的結構體和陣列進行清零操作的一種有效方法。

函式形式:memset(void *buffer,int c,size_t n)

buffer是需要設定的記憶體的開始位址;c是期望填充值;n是需要填充的位元組數。

例1:乙個inta[10]型變數,則memset(a,100,sizeof(int))此操作後,元素a[0]的每個位元組的值都是100,即0x64,二進位制表示:01100100,所以元素a[0]為0x64646464,二進位制表示:01100100 01100100 01100100 01100100

void main() 

output 

before: this is a test of the memset function 

after: **** is a test of the memset function

memset用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為' '或'\0';

例:char a[100];

memset(a, '\0', sizeof(a));

memset可以方便地清空乙個結構體型別的變數或陣列。 

如:struct sample_struct

;對於變數

struct sample_strcut sttest; 

一般情況下,清空sttest的方法:

sttest.csname[0]='\0';

sttest.iseq=0;

sttest.itype=0; 

用memset就非常方便:

memset(&sttest,0,sizeof(struct sample_struct));

如果是陣列:

struct sample_struct test[10];

則memset(test,0,sizeof(struct sample_struct)*10);

memcpy 用來做記憶體拷貝,你可以拿它拷貝任何資料型別的物件,可以指定拷貝的資料長度。

例:char a[100],b[50]; memcpy(b, a, sizeof(b));

注意如果用memcpy(b,a,sizeof(a)),很可能會造成b的記憶體位址溢位。

strcpy就只能拷貝字串了,它遇到'\0'就結束拷貝。

例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字串長度(第乙個『\0』之前)是否超過50位,如超過,則會造成b的記憶體位址溢位。

str也可以用用個引數的strncpy(a,b,n)

memset,記憶體初始化函式

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

memset函式 記憶體初始化介紹

memset函式詳細說明 收藏 1。void memset void s,int c,size t n 總的作用 將已開闢記憶體空間 s 的首 n 個位元組的值設為值 c。2。例子 include void main 3。memset 函式常用於記憶體空間初始化。如 char str 100 mem...

memset函式初始化

對於絕大多數編譯器來講,char namekey 15 與memset namekey,0x0,sizeof namekey 或memset namekey,0 sizeof namekey 這三個是一樣的。但是有的編譯器,char namekey 15 只將namekey 0 給賦值為 0 其他成...