簡體   English   中英

返回從字符串末尾開始的位置開始的子串(C ++)

[英]Return substring starting from position past the end of string (C++)

C ++ STL函數substr(pos,n),pos的第一個參數據說具有這種行為。

“如果傳遞的位置超過字符串的結尾,則拋出out_of_range異常。”

但是,如果我做的話

string s("ab");
cout<<s.substr(2,666)<<endl;

然后,即使pos = 2定義超過字符串的結尾,也不會拋出異常。

string :: end將“在字符串中的最后一個字符之后”的位置定義為“超過字符串的結尾”。 我注意到返回的字符總是'\\ 0'。 我的問題是,如果這是標准行為,如果我可以指望在這種情況下返回一個空字符串的事實。 謝謝。

實際要求是(§21.4.7.8):

1 Requires: pos <= size()
2 Throws: out_of_range if pos > size().

在你的情況下,pos == size(),所以你永遠不應該看到異常,並且應該總是得到一個空字符串。

由於作為第一個參數傳遞的位置處的字符包含在結果中,因此不應將位置2視為超出字符串的結尾:它位於字符串的末尾。 字符串的長度是傳遞給substr的合法參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM