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本來就只佔一個字節。