C++ STL函数substr(pos,n),pos的第一个参数据说具有此行为。从字符串末尾的位置开始返回子字符串(C++)
“如果传递的位置超过了字符串的末尾,则会抛出out_of_range异常。”
但是,如果我这样做
string s("ab");
cout<<s.substr(2,666)<<endl;
则不会抛出异常,即使POS = 2是定义过去字符串的结尾。
string :: end将“在字符串中最后一个字符后面”的位置定义为“超过字符串末尾”。 我注意到返回的字符总是'\ 0'。我的问题是,如果这是标准行为,并且如果我可以指望在这种情况下返回空字符串的事实。谢谢。
没错。 's.substr(s.length(),666)'会返回'“”'而s.substr(s.length()+ 1,666)'会抛出异常。 – Prasanth
但这怎么可能? s.length()是超过字符串末尾的位置,因此应根据上面的语句抛出异常异常。 – Slazer
该报价从哪里来?充其量它是混乱。 –