C語言memset函數使用說明

一。函數原形   void *  memset(void*s, int ch,size_t n)

二。函數作用  將以s內存地址爲首的連續n個字節的內容置成ch,一般用來對大量結構體和數組進行清零

三。常見錯誤

1.搞反了 ch 和 n的位置

eg.

對char[20]清零,一定是 memset(a,0,20);

2.過度使用memset

3.其實這個錯誤嚴格來講不能算用錯memset,但是它經常在使用memset的場合出現

int fun(strucy something * a)
{
.....
memset(a,0,sizeof(a));
.....
}


這裏錯誤的原因是VC函數傳參過程中的指針降級,導致sizeof(a),返回的是一個 something*指針類型大小的的字節數,如果是32位,就是4字節。經常使用這種形式

memset(a,0,n*sizeof(type));

4.想對數組初始化爲1

int main()
{
     int a[20];
     memset(a,1,20);
}	
	這種方法不能初始化爲1。原因是memset函數是按照字節賦值的,int 是4個字節所以爲0x01010101,就是十進制的16843009。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章