繁体   English   中英

在遍历字符串时,即使我已经超出了长度,为什么还没有超出范围错误?

[英]While iterating through a string, why am I NOT getting out of range error, even though I'm already beyond its length?

我的代码从字面上是这样的:

int main(){
    string s = "Success!\n";
    for (int i=0; i<10; ++i) cout<<s[i];
    return 0;
}

字符串s的长度为8; 即使我使用的迭代器'i'超出了字符串的长度,也没有出现任何错误。 为什么? 输出为:

Success!

有了换行符,我什至没有放换行符

字符串s的长度为8

不,不是9。

即使我使用的迭代器“ i”超出了字符串的长度,也没有出现任何错误

您不会超出字符串的长度,而是等于字符串的长度。 定义为返回空字符。 即使使用operator[]超出了字符串的长度,这也是未定义的行为 ,不希望引发异常。

我什至没有放换行符

... 是的,你做到了。

按照字符串下标(括号)运算符的定义:

char&运算符[](size_t pos);

如果pos等于字符串长度,则该函数将返回对字符串中最后一个字符之后的空字符的引用(不应修改)。

"Success!\\n"是长度为9的字符串S的索引为0 , ! 在索引7处为\\n在索引8处为\\n 。因此,当您引用s [9]时,它将返回空\\0 char。

代替cout << s[i]使用cout << s.at(i) ,您将获得所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM