string之'\0'的影响

常见的错误:

char sz[5] = {'1', '2', '3', '4', '5'};

std::string str(sz);

std::cout << str.length() << "\n";  

std::cout << str.c_str() << "\n";

输出:


原因:

就是字符串末尾不是'\0',所以得不到我们希望的结果。

更改:

把字符串改为

char sz[5] = {'1', '2', '3', '4', '\0'};

则输出为


这下就正确了。

阐述:

在c++编程中我们常常遇到申请一个缓冲区,为了不浪费内存把缓冲区申请为正好或稍大一点,然后填满数据,直接用char*构造string,结果常常结尾没有'\0',导致使用这个string的时候,发现数据不是我们想要到,其实原因就在一个小小的'\0'身上。

建议:

为了避免使用string的时候出错,我们可以这样.

1. 申请字符缓冲区的时候,总是申请比需要的多一个字节,用来存放'\0'

2. 缓冲区存放数据之前先把他们都初始化为'\0',或者存储数据之后在末尾加上'\0'

3. 放完数据后,对数据做一下打印,做到万无一失


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值