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

C++ string 成员函数 length() size() 和 C strlen() 的区别返回 string 长度 单位字节 size tlength constnoexcep 返回 string 长度 单位字节 作用等同于 length size tsize constnoexcep C 标准库函数 返回 C 风格字符串长度 单位字节 size tstrlen constchar str 实际项目中 C

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.结论

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

参考文献

C++ reference

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217231.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:03
下一篇 2026年3月18日 上午10:03


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号