memset()函数及其作用

memset函数用于将内存区域的字节设置为特定值,常用于数组和结构体的初始化,确保内存空间的清零或者设定初始状态。该函数原型为void* memset(void* buffer, int c, size_t count),它接受一个指针、一个ASCII值和字节数。通过memset,可以快速地一次性初始化大块内存,避免手动逐个元素赋值。在动态内存分配后,使用memset进行初始化是常见的做法,以消除潜在的未定义数据影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)       

        buffer:为指针或是数组,

         c:需要赋给buffer的值,

        count:是buffer的长度.
       这个函数多用于清空数组.       如:原型是memset(buffer, 0, sizeof(buffer))

       Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为

 ‘ ’或  ‘/0’;

      例:  char a[100];

             memset(a, '/0', sizeof(a));

             memset可以方便的清空一个结构类型的变量或数组.

如下:

struct my_struct
{
        char Name[16];
        int    Seq;
        int    Type;
};

针对变量: struct my_struct  Test;

一般情况下,清空Test的方法;

Test.Name[0] = '/0';

Test.Seq = 0;

 Test.Type = 0;

//使用memset 就非常方便了

memset(&Test, 0 , sizeof(struct  my_struct));

//如果是数组

struct my_struct TEST[10];

 memset(TEST, 0 , sizeof(struct  my_struct) * 10);

2.将p所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASSCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作;

用法: memset(void *p , char  ch  ,unsigned n);

那么所指向的某一块内存中的每个字节的内容全部设置为ch所指定的ASSCII值有什么用呢?

为什么说,这个函数通常为新申请的内存做初始化工作 ?

解释: 刚分频的内存空间,或者是被你用过的内存空间的数据不是固定的, 为了避免这些无用的数据对程序带来影响, 可以用memset 把这些内存里面的数据设置成某个数值, 一般情况下设置成 0, 当然,如果你的程序不会受这些数据影响,就不用做这个工作了, 所谓初始化, 是指将你定义的变量或申请的空间赋予你所期望的值, 例如 int i = 0; 就表明定义了一个变量 i,并初始化为0; 如果 int j = 3; 就表明定义了一个变量j, 并初始化为3;

但是对于大块的内存分配,这种发发当然不行, 如果 int  arr[100] ;定义了数组arr ,包含100个元素, 如果写成 int  arr[100] = 0;想将数组全部初始化为0 ,是不行的, 连编译器都不能通过, 这种情况下, 初始化有两种方法,:

①一种是一个一个的初始化, 用一个for循环来实现, for(int i = 0;i<100;i++) arr[i] = 0;就完成了数组的初始化,

② 另一种方法就是使用memset:一个语句就够了,  memset(arr, 0 ,sizeof(int)*100);

其中: arr 数组的首地址, 0需要赋的值, sizeof(int) 求出int类型的长度,乘以100 就表示arr数组的整个长度

如果用了malloc分配的内存,一般只能使用memset来初始化了,用第一种方法显然不合适.

例如: char ch[10]

比如: memset(ch, 0 , 8); 就是把数组ch 的前八个地址设为0,后面的不一定为0,  比如刚开始

ch[1]='z',ch[9]='a',ch[9] = b, 经过 memset后,ch[1] 为0,而ch[8], ch[9]都不变 

3.memset 函数详细说明

1) void *memset(void *s ,int  c, size_t  n)

作用: 将已经开辟内存空间 s的首个到n个字节的值设为值c.

2)memset() 函数常用于内存空间初始化; 比如:

char str[100];

memset(str, 0 , 100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值