不建议用memset初始化指针

先运行一段代码:

int main(){

        char* f;//不进行赋值,此时无法访问F指针,错误写法,实际不建议这样写code

        memset(f, 0, sizeof(f));

        if(NULL == f) //成立,此时的f变为能够使用的指针,虽然指针为空

                printf("f指针为空");

        return 0;

}

一般情况下,给空指针赋值为NULL,初始化一块内存,用memset为0。

如果内存块中有的字段是指针,此时就要注意了。虽然NULL一般情况下就是0,但是不排除也有特别的时候,特别是在写跨平台代码的时候,不要有这种默认思维。

应该老老实实的给指针赋值NULL,值数据memset为0。

如果一个个给指针赋值NULL太费劲,可能是代码结构有问题,也可以考虑不初始化,用后面的代码逻辑去保证。

'\0'字符为null字符,是字符串的结束符,在ASCII中排第1位,值就是0x00。

可以用 memset 函数来得到一个空指针吗?

这个问题等同于:如果 p 是一个指针变量,那么

memset( &p, 0, sizeof(p) ); 和 p = 0;

是等价的吗?

答案是否定的,虽然在大多数系统上是等价的,但是因为有的系统存在着“非零空指针” (nonzero null pointer),所以这时两者不等价。由于这个原因,要注意当想将指针设置为空指针的时候不应该使用 memset,而应该用空指针常量或空指针对指针变量赋值或者初始化的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值