C++ 在c++;,std::string::size()不计算修改的字符串长度
我的代码如下:C++ 在c++;,std::string::size()不计算修改的字符串长度,c++,string,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
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;
}
intmain(){
字符串s=“abcd”;
int length_of_string=s.size();
cout程序的行为未定义
std::string
的长度由size()
返回
尽管允许您使用[]
修改索引size()
之前的字符串中的字符,但不允许在该索引上或之后修改字符
参考资料:如果需要在字符串末尾插入字符,则应使用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;
}
intmain(){
字符串s=“abcd”;
int length_of_string=s.size();
cout这表明在字符串数组的size
位置访问是未定义的字符串文字,C字符串被\0
终止,但是对于std::string
,您不能假设相同。此外,当您写入字符串大小以外的字符串元素时,您正在进行未定义的行为和任何操作可能发生-在任何情况下,代码都是错误的。std::string
没有任何内容表明是空终止的。@JesperJuhl:的确,这是一个非常好的观点。我已经重写了。@JesperJuhl:C++11说std::string
是空终止的。特别是,std::basic_string::operator[](size\u type pos)
返回CH{0}
whenpos==
std::basic_string::size()`。这是对C++98的更改。