C/C++ strlen(str)和str.length()和str.size()的区别

转载:https://blog.csdn.net/hannea/article/details/25102727

strlen(str)和str.length()和str.size()都可以求字符串长度,返回字符串中字符的长度,不包括‘/0’。

其中str.length()和str.size()是同义词,返回同样的值。

strlen(str)是用于求字符数组的长度,其参数是char*。

[cpp]  view plain  copy
  1. #include <string>  
  2. #include <iostream>  
  3. using namespace std;  
  4.   
  5. int main()  
  6. {  
  7. string name="babababa";  
  8. cout<< "name.length(): " << name.length()<<endl;  
  9. cout<< "name.size(): " << name.size()<<endl;  
  10.   
  11. char mail[100]="haha";  
  12. cout<< "strlen(mail): "<< strlen(mail)<<endl;  
  13.   
  14. char *psd;  
  15. psd="lalala";  
  16. cout<< "strlen(psd): " << strlen(psd)<<endl;  
  17.   
  18.  return 0;  
  19. }  
输出结果:


### C++ 中 `length`、`sizeof` `strlen` 的区别 #### 1. **`length()`** `length()` 是标准库中的成员函数,通常用于处理字符串类的对象(如 `std::string`)。它返回的是该字符串对象的实际字符数,不包括终止符 `\0`。 以下是使用 `length()` 的示例代码: ```cpp #include <iostream> #include <string> int main() { std::string str = "Hello, world!"; std::cout << "字符串的长度:" << str.length() << std::endl; return 0; } ``` 此方法适用于 `std::string` 类型的字符串[^2]。 --- #### 2. **`sizeof`** `sizeof` 是一个操作符而非函数,用来计算变量或数据类型在内存中占用的空间大小(单位为字节)。它的行为取决于输入参数: - 如果是对基本数据类型调用,则返回该类型的固定字节数。 - 如果是对数组调用,则返回整个数组占据的总字节数。 - 如果是对指针调用,则返回指针本身的大小(通常是 4 或 8 字节,具体依赖于平台架构)。 下面是一些例子: ```cpp #include <iostream> int main() { char c = 'a'; int i = 10; double d = 3.14; std::cout << "char 大小: " << sizeof(c) << " bytes\n"; std::cout << "int 大小: " << sizeof(i) << " bytes\n"; std::cout << "double 大小: " << sizeof(d) << " bytes\n"; char array[] = "Hello, world!"; std::cout << "数组大小: " << sizeof(array) << " bytes\n"; // 包括 '\0' return 0; } ``` 需要注意的是,对于动态分配的数组或者指向字符串的指针,`sizeof` 只会给出指针本身所占空间的大小,而不会考虑实际存储的内容[^3]。 --- #### 3. **`strlen`** `strlen` 函数来自 `<cstring>` 库,专门针对以 null 结尾 (`\0`) 的 C 风格字符串工作。它统计从起始位置到第一个遇到的零结束符之间的有效字符数量,因此忽略掉可能存在的多余空白区域。 这里有一个简单的演示程序: ```cpp #include <iostream> #include <cstring> int main(){ const char* s = "example string."; size_t len = strlen(s); std::cout << "The length of the string is: " << len << "\n"; return 0; } ``` 值得注意的一点是,如果传入给 `strlen` 的并非合法的 C 字符串(即缺少结尾标记),则可能导致未定义的行为发生[^1]。 --- ### 总结对比表 | 特性 | `length()` | `sizeof` | `strlen` | |-----------------|-------------------------------|------------------------------------|--------------------------------| | 返回值 | 实际字符数目 | 占用内存大小 | 不含终结符的有效字符计数值 | | 数据结构支持 | 主要面向 `std::string` | 支持任意类型 | 专供 C-style strings | | 是否包含`\0` | 否 | 是 | 否 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值