memset定义
void *memset( void *dest, int c, size_t count );
这个函数是按字节初始化目标buffer的,所以一般用来初始化类型为char的数组,下面代码输出aaa
char buffer[3] ; memset(buffer, 'a', 3) ; for (int i = 0; i < 3; ++i) { cout << buffer[i] ; }
如果用这个函数初始化其他类型的数组,有时候会得到意想不到的结果,比如int数组
int buffer[4] ; memset(buffer, 0, 4) ; for (int i = 0; i < 4; ++i) { cout << buffer[i] << endl ; }
输出结果是
0
-858993460
-858993460
-858993460
怎么没有输出0000呢?因为memset按Byte初始化,所以实际上只初始化了buffer前四个字节的内容,也就是一个int的内容,而后面三个int还是原来的值。所以正确的写法是
memset(buffer, 0, sizeof(int) * 4) ;
如果只是想清零的话,也可以使用ZeroMemory函数
ZeroMemory(buffer, sizeof(int) * 4) ;
附,微软的memset实现
char *memset (char *dst, char value, unsigned int count) { char *start = dst; while (count--) *dst++ = value; return(start); }