簡體   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