关于s.length(),s.size()返回值是无符号整数

文章讲述了作者在帮助同学调试代码时遇到死循环,通过网络搜索发现无符号整数-1导致的无限循环问题,并解释了解决方案——将`(s.length()-1)`转换为有符号整数`(int)(s.length()-1)`。
摘要由CSDN通过智能技术生成

今天在帮同学看代码bug的时候突然发现如下代码是一个死循环:

int main()
{
    string s="";
    cout<<s.length();
    for(int i=0;i<(s.length()-1);i++)
    {
        i--;
    }
    
    return 0;
}

我们尝试了很久,始终没有发现原因。后来尝试在网上搜索这段代码,发现了这篇博客:C++学习笔记26 size()、length()等函数的返回值的问题_s.size和s.length-CSDN博客使我们大彻大悟!无符号整数-1就变成了无穷大,因此将代码改为如下就可以成功运行了:

int main()
{
    string s="";
    cout<<s.length();
    for(int i=0;i<(int)(s.length()-1);i++)
    {
        i--;
    }
    
    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这四个函数的作用都与获取数据的长度有关,但具体用法和适用范围有所不同。 1. sizeof() sizeof() 是 C/C++ 中的一个操作符,用于获取数据类型或变量在内存中所占的字节数。例如: ```c++ int a; size_t size = sizeof(a); ``` 这里 size 变量的值为 4,因为 int 类型在大多数系统上占用 4 个字节。 2. strlen() strlen() 是 C/C++ 中的一个函数,用于获取字符串的长度,不包括字符串末尾的 null 字符。例如: ```c++ char str[] = "hello"; size_t length = strlen(str); ``` 这里 length 变量的值为 5,因为 "hello" 这个字符串共有 5 个字符。 3. length() length() 是 C++ STL 中的一个函数,用于获取容器(如 std::string、std::vector 等)中元素的个数。例如: ```c++ std::string str = "hello"; size_t length = str.length(); ``` 这里 length 变量的值为 5,因为 "hello" 这个字符串共有 5 个字符。 4. size() size() 是 C++ STL 中的一个函数,用于获取容器(如 std::string、std::vector 等)中元素的个数。与 length() 函数相似,但返回值类型不同,size() 函数返回的是一个无符号整数类型(如 size_t),而 length() 函数返回的是一个有符号整数类型(如 int)。例如: ```c++ std::vector<int> vec = {1, 2, 3, 4, 5}; size_t vec_size = vec.size(); ``` 这里 vec_size 变量的值为 5,因为 vec 容器中共有 5 个元素。 总结: | 函数/操作符 | 适用范围 | 返回值类型 | 作用 | | --- | --- | --- | --- | | sizeof() | 任何数据类型或变量 | 无符号整数类型(如 size_t) | 获取数据类型或变量在内存中所占的字节数 | | strlen() | 字符串 | 无符号整数类型(如 size_t) | 获取字符串的长度 | | length() | 容器(如 std::string、std::vector 等) | 有符号整数类型(如 int) | 获取容器中元素的个数 | | size() | 容器(如 std::string、std::vector 等) | 无符号整数类型(如 size_t) | 获取容器中元素的个数 |

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值