在遍历字符串时,为什么我没有超出范围错误,即使我已经超出了它的长度?
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& operator[] (size_t pos(;
如果 pos 等于字符串长度,则该函数返回对字符串中最后一个字符后面的 null 字符的引用(不应修改(。
"Success!n"
是长度为 9 的字符串。S
位于索引 0,!
位于索引 7,n
位于索引 8。 因此,当您引用 s[9] 时,它会返回 null