memset賦值問題

http://www.cnblogs.com/caidaxia/archive/2011/11/21/2257241.html


關於memset的用法,

常用於對於較大的結構體或數組進行清零操作//注意,是清零操作,如果進行統一賦值,要謹慎。

void *memset(    void *dest,    int c, size_t count );

函數將dest所指向的內存塊全部以字節爲單位,用c進行填充,函數第三個參數指定內存塊的大小。

char a[20];
memset(a,0,sizeof(a));

 上述代碼將a中的字符全部以0填充。

對於清零初始化,一般不用出現錯誤使用,但是在一些統一賦初值的運算中,就有可能會出現下述錯誤情況。

int a[5]; 
memset(a,1,sizeof(a));
//這裏改成memset(a,1,5 *sizeof(int))也是不可以的   
for(int i = 0;i < 5;i++) 
cout<<a[i]<<" ";

  a中所有元素的值將爲16843009。

這是因爲,memset是以字節爲單位以指定值對內存填充,由於int型在一般機器上都佔4爲,因此每個整型被填充的值爲0x01010101即爲十進制的16843009

 

結論:使用memset對整型等進行賦值時要考慮清楚,注意memset的填充原理。

當然,memset在用於對char型以指定字符填充的運算中很難出現這些問題,因爲char本來就只佔一個字節。

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