memset函数越界分析

一、memset()函数原型
    将buffer所指向的某一块内存中的前count个字节的内容全部设置为c指定的ASCII值

extern void *memset(void *buffer, int c, int count)        
{  
    const unsigned char uc = c;  
    unsigned char *su;  
    for(su = buffer;0 < count;++su,--count)  
    *su = uc;  
    return buffer;  
}  
    buffer:为指针或是数组,
    c:是赋给buffer的值,
    count:是buffer的长度.

二、函数使用
    memset可以清空一个结构体
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
struct sample_strcut stTest;
memset(&stTest,0,sizeof(struct sample_struct));
    如果是数组:
struct sample_struct TEST[10];
memset(TEST,0,sizeof(struct sample_struct)*10);

三、注意
  1. memset是以字节为单位初始化内存块。
char data[10];  
memset(data, 1, sizeof(data));    // right  
memset(data, 0, sizeof(data));    // right 

int data[10];  
memset(data, -1, sizeof(data));    // right  
memset(data, 1, sizeof(data));    // wrong, data[x] be 0x0101 
  2. 当结构体中包含指针时,在使用memset时需要小心。
struct Parameters {  
          int* p_x;  
};  
Parameters par;  
memset(&par, 0, sizeof(par));  
    当memset初始化时,会把p_x指针本身设置为0。
  3.这里的memset是多余。
char buffer[20];
memset(buffer,0,sizeof(char)*20);
strcpy(buffer,"123");
//以下并不多余
memset(buffer,0,sizeof(char)*20);
memcpy(buffer,"123",3);


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leonban

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值