在c ++中,std :: string :: size()不计算修改后的字符串长度

时间:2018-03-16 09:59:04

标签: c++ string

我的代码如下:

int main(){
    string s = "abcd";
    int length_of_string = s.size();
    cout<<length_of_string<<endl;
    s[length_of_string] = 'e';
    s[length_of_string+1] = 'f';
    int length_of_string2 = s.size();
    cout<<length_of_string2<<endl;
    return 0;
}

据我所知,每个字符串都以NULL字符终止。在我的代码中,我声明一个长度为4的字符串。然后我打印length_of_string,它给出一个值4.然后我修改它并添加两个字符,&#39; e&#39;在索引4和&#39; f&#39;索引为5.现在我的字符串有6个字符。但是当我再次阅读它的长度时,它告诉我长度是4,但我的字符串长度是6。

在这种情况下,s.size()函数如何工作。直到NULL字符不是计数吗?

2 个答案:

答案 0 :(得分:4)

程序的行为是未定义

std::string返回size()的长度。

虽然允许您使用[]修改索引size()之前的字符串中的字符,但您不能修改上或之后的字符。< / p>

参考:http://en.cppreference.com/w/cpp/string/basic_string/operator_at

答案 1 :(得分:2)

如果你需要在字符串的末尾推送一个字符,你应该使用std::string::push_back函数:

int main(){
    string s = "abcd";
    int length_of_string = s.size();
    cout<<length_of_string<<endl;
    s.push_back('e');
    s.push_back('f');
    int length_of_string2 = s.size();
    cout<<length_of_string2<<endl;
    return 0;
}