慎用memset函数
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); }
作者:zdd
出处:http://www.cnblogs.com/graphics/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.