书法字典:https://www.shufadict.com

慎用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);
}

posted on 2010-07-08 09:33  翰墨小生  阅读(688)  评论(0编辑  收藏  举报

导航

书法字典:https://www.shufadict.com