1.先说测试结果,string 并不是以‘\0'作为字符串结尾的标志,但是经试验,字符串可以越界访问a[3],并且字符串的结尾确实是'\0';
实验环境:vs2017,win 10,c++ 17
{
//string a("abcd", 3);
string a = "abs";
cout << "---------------------" << endl;
cout << a.capacity() << endl; //15
cout << a.size() << endl; //3
if (a[3] == '\0') {
cout << "yes" << endl; //说明字符串结尾确实是'\0'
}
else {
cout << "no" << endl;
}
a[1] = '\0';
cout << a << endl; //说明在c++中,的确不是以'\0'为结尾的识别符号
}
2.Q&A:经查找,std::string 并未规定需要‘\0'作为字符串结尾,编译器在实现时既可以在结尾出加,也可以不加。
实际上,c++的字符串,确实不需要添加字符结束标志,因为字符串是面向对象的,长度信息直接被存储在对象成员中,而c语言中,所有字符串是以字符串数组存储的,使用char *指针时,需要一个特殊的字符来标志字符串的结束。
3.验证存储区域
{
//验证对象a的存储地址,以及其指向的字符串的首地址
cout << "###