String.size不会无限循环

问题描述

因此,我不知道实际上是不是size()函数导致了此问题,但是每当我运行此代码时,我都希望它无限循环,但事实并非如此。我正在使用c ++和visual studio。

string name = “Devin”;
for(int i = 4; i < name.size(); i—-)
{
  printf(“%c”,name[i]);
}

解决方法

考虑这样的代码:

string name = "Devin";
for(int i = 4; i < name.size(); i--)
    cout<< name[i]<<" i :"<<i<<"\n";

您的输出是

n i :4
i i :3
v i :2
e i :1
D i :0

因为 将signedunsigned进行比较时,编译器会将signed的值转换为unsigned。对于平等,-1 == (unsigned) -1无关紧要。对于其他比较而言,例如以下是正确的:-1 > 2Uname.size()unsigned,而i即将变成unsigned的数字,循环结束。为了更好的理解;我使用5代替了name.size(),因为"Devin"的长度是5

for(int i = 4; i < 5; i--)
    cout<< name[i]<<" i :"<<i<<"\n";

输出为:

// Your i is going to negetive and infinity loop like 
i : -1 
i : -2
.
.
.
// and maybe you got segmentation fault (core dumped)
// Because your string just have 5 indexes 

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...