我的代码如下:
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字符不是计数吗?
答案 0 :(得分:4)
程序的行为是未定义。
std::string
返回size()
的长度。
虽然允许您使用 参考:http://en.cppreference.com/w/cpp/string/basic_string/operator_at []
修改索引size()
之前的字符串中的字符,但您不能修改上或之后的字符。< / p>
答案 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;
}