C++string成员函数length()size()和Cstrlen()的区别
1.函数申明
C++ string 成员函数 length() 等同于 size(),但是和 C 库函数 strlen() 有着本质区别,使⽤时切勿混淆。⾸先看⼀下三个函数的申明:
// 返回 string 长度,单位字节
size_t length() const noexcept;
// 返回 string 长度,单位字节。作⽤等同于 length()
size_t size() const noexcept;
// C 标准库函数,返回C风格字符串长度,单位字节
size_t strlen ( const char * str );
2.使⽤⽰例
实际项⽬中,C++ string 获取长度时,我们经常使⽤以下两种⽅法。
// ⽅法⼀:调⽤ length() 或 size()
string strTest = "test";
strTest.length(); // 4
strTest.size(); // 4
// ⽅法⼆:转为 C 风格字符串,调⽤ strlen()
strlen(strTest.c_str()); // 4
上⾯的代码⽚段获取的字符串长度均是 4,看不出什么区别,那么⽅法⼀和⽅法⼆有什么区别呢?请看如下代码:
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()<<" 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())=1
strTest:avh
3.结论
c++中string的用法(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;
参考⽂献[1]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论