关于 malloc和字符指针的一点问题

前天在做一个大整数相乘的算法,用链表实现,最后一步是字符串逆序,其中用到下面一条语句。

char *c = (char*)malloc(sizeof(char)* 5);

调试的时候想看看strlen(c),结果如下:

sizeof(c)为24,本以为结果是5的,然后郁闷了。

经过一番思考,原来问题出在一个比较隐秘的地方。

由于malloc函数是不会自动给分配的内存初始化的(calloc可以),而且c只是指向分配内存的第一个字符,当求c指向的字符串长度时,是遇到’\0’字符才结束的。

逐语句调试进入strlen函数看看,如下:

里面指出“null-terminated string”也就是要有一个结束标志。于是,我们就可以做个测试了。在后面添上一句,现在代码如下:

char* c=(char*)malloc(5*sizeof(char));

*(c+5)='\0';

然后再看监视器:

现在strlen(c)变成预料中的5了。

多说一句,用char c[5]存字符串的时候也要注意结束标志’\0’, 这样char c[5]就只能存长度为4的字符串了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值