前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中string成员函数length()与size()和strlen()的区别

C++中string成员函数length()与size()和strlen()的区别

作者头像
恋喵大鲤鱼
发布2018-08-03 11:00:29
3.1K0
发布2018-08-03 11:00:29
举报
文章被收录于专栏:C/C++基础C/C++基础

首先看一下三个函数的申明:

代码语言:javascript
复制
//返回string长度,单位字节
size_t length() const noexcept;

//返回string长度,单位字节。作用等同于length()
size_t size() const noexcept;

//C标准库函数,返回C风格字符串长度,单位字节
size_t strlen ( const char * str );

实际项目中,C++ string获取长度时,我们经常使用以下两种方法。

代码语言:javascript
复制
//方法一:调用length()或size()
string strTest="test";
strTest.length();           //结果为4
strTest.size();             //结果为4

//方法二:转为C风格字符串,调用strlen()
strlen(strTest.c_str());    //结果为4

上面的代码片段获取的字符串长度均是4,看不出什么区别,那么方法一和方法二有什么区别呢?请看如下代码:

代码语言:javascript
复制
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;

代码输出:

代码语言:javascript
复制
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的长度,比如:

代码语言:javascript
复制
//构造时使用
string strTest(buf,6);

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

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

参考文献

[1]C++ reference

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档