您的位置:首页 > 其它

关于函数memset的若干用法和注意事项

2016-05-11 22:24 447 查看
        

#include<memory.h>或<string.h> //在一些编译器中可不添加头文件,视具体情况而定
void* memset(void *s,  int ch,  size_t n);


memset将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
它是对较大的结构体或数组进行清零操作的一种最快方法。
不能对非单字节的数组进行赋值,除非是赋0值,比如:
int array[16];
memset(array, 1, sizeof(int) * 16);  //error, sizeof(int)为4
memset(array, 0, sizeof(int) * 16);  //ok

事实上,第一种操作会使得数组的每个元素都变为(00000001 00000001 00000001 00000001) = 16843009,但第二种操作是没有问题的,因为把每个字节赋为0后,其值也是0。因此,下面的操作没有任何问题:
char ch[16];
bool bl[16];
memset(ch, 'A', sizeof(char) * 16);
memset(bl, true, sizeof(bool) * 16);

甚至可以对只含有单字节的结构体赋值:
struct strc
{
bool bl;
char ch;
};
strc array[16];
memset(array, 1, sizeof(strc) * 16);

因此,memset用于对任意数组进行初使化(仅限赋0),以及对只含单字节元素的数组进行赋值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: