【C++】string类构建的字符串以‘\0‘结束吗?

        C++也就是C plus plus,人如其名,C++是C语言的升级版。C语言的字符串的本质是字符数组,它是以'\0'结尾的并将其作为结束标志,那么C++中的string类对象是不是也是以'\0'结束呢?


验证

string类对象的结尾有没有'\0'?

        想要解决这个问题很简单,因为string类可以看作一个元素类型为char的顺序表,所以我们只需要看看string类对象下标为size的位置的内容是什么就行了

         经过实验我们我们发现,string类型对象确实会在末尾加上'\0',但是这个'\0'并不会计入到字符串的size和capacity中


string类对象以'\0'作为结束标志吗?

        从图中我们可以看见,'\0'被插入到了字符串中并计入到了size中,但是string类型在直接输出时,并没有以'\0'作为输出的结束标志;而转为C类型字符串输出时,把'\0'当作了结束标志

        因此可以得出结论,string类型对象并不会以'\0'作为结束标志


小结

        C++中的string类对象会在末尾补上'\0',这是因为C++有C语言的历史包袱。因为C语言的字符串以'\0'结尾,所以为了方便在必要时将string字符串转为C类型字符串,所以string类型对象会在末尾补上一个不计入size和capacity的'\0'

        C++中的string类对象并不会将'\0'作为结束标志,因为string类对象内部维护了一个记录自身长度的成员变量size,在输出string类对象时会根据size的大小决定输出多少个字符,而不是看'\0'的位置决定输出到哪个字符结束

        注:用双引号括起来的字符串也属于C类型的字符串,所以它也是会以'\0'结尾的。


        以上为个人在学习路上的思考,如有错误还请指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值