C++深度学习—资源问题,memset

本文详细解析memset()方法的使用场景与注意事项,包括字符数组、字符串数组、整型数组及结构体变量的置零操作。同时介绍了ScopeGuard的概念与应用,提升代码质量和资源管理效率。

1、http://mindhacks.cn/2012/08/27/modern-cpp-practices/

看到有关于ScopeGuard的描述,真心大神啊!一定要好好琢磨一下。

2、memset()方法,void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

注意这里是 首n个字节的值,所以sizeof取总长度 

作用是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。

注意事项:
1、如果字符数组初始化或置某一值时,用法:
char a[5];
memset(a,0,5);
2、对于字符串数组来说,是不可以修改字符串的内容,如
char *a=“adgfa”;
memset(a,0,strlen(a)-1);//此时会产生访问冲突,因为:a是字符串常量,存储在内存中的静态存储区域(属于不可写空间)
3、如对int类型数组进行置零操作(注意:仅限于置零操作,不能进行置其他值的操作),需要这么用,如
int a[5];
memset(a,0,sizeof(a));
4、memset可以对结构体变量或结构体数组进行初始化处理,如:
struct sample_struct
{
    char csName[16];
    int iSeq;
    int iType;
};
对于变量
struct sample_strcut stTest;
1)、一般情况下,清空stTest的方法:
stTest.csName[0]={'\0'};
stTest.iSeq=0;
stTest.iType=0;
2)、用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
3)如果是数组,方法如下:
struct sample_struct TEST[10];
memset(TEST,0,sizeof(struct sample_struct)*10);
注意:如果 结构体中有 数组的话还是需要对数组单独进行初始化处理的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值