C++中string类的length()与size()方法和C语言的strlen()函数有什么区别?

直接上代码段:

char buf[256]={0};
buf[0]='a';
buf[2]='v';
buf[3]='h';

string strTest(buf,6);
cout<<"strTest[0]:"<<(uint32_t)strTest[0]<<"_"<<(uint32_t)strTest[1]<<"_"<<(uint32_t)strTest[2]<<"_"<<(uint32_t)strTest[3]<<"_"<<(uint32_t)strTest[4]<<"_"<<(uint32_t)strTest[5]<<endl;
cout<<"strTest.length():"<<strTest.length()<<" strTest.size():"<<strTest.size()<<endl;
cout<<"strlen(strTest.c_str()):"<<strlen(strTest.c_str())<<endl;
cout<<"strTest:"<<strTest<<endl;

输出如下:

strTest[0]:97_0_118_104_0_0
strTest.length():6 strTest.size():6 strlen(strTest.c_str()):
strlen(strTest.c_str()):1
strTest:avh

结论:

结论: 
(1)当string中含有空字符’\0’,使用strlen()获取string的长度时会被截断,使用成员函数length()和size()可以返回string的真实长度。 
(2)cout对string输出时,会过滤掉空字符,输出不会被截断。 
(3)在构造或者拼接string时,建议同时指定string的长度,比如:

//构造时使用
string strTest(buf,6);

//而非,因为会被截断
string strTest(buf);

//拼接时使用
strTest.append(buf,6);
//而非,因为会被截断
strTest+=buf;

以上内容参考:链接


对于.length()和.size(),其实是没有区别的,是因为容器都含有.size()方法,但是对于string类来说,.length()更加直观,所以新加了这个函数,但是其实他俩相当于是同义词。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值