直接上代码段:
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()更加直观,所以新加了这个函数,但是其实他俩相当于是同义词。