如何解决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
因为
将signed
与unsigned
进行比较时,编译器会将signed
的值转换为unsigned
。对于平等,-1 == (unsigned) -1
无关紧要。对于其他比较而言,例如以下是正确的:-1 > 2U
。
name.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。