std::string问题总结
返回指针修改问题
std::string test_string = "hello world"
test_string.c_str()
/* 返回的是Const char*,不可当做指针修改!*/
test_string.data()
/* C20之前返回和c_str()没区别,不可修改,
C20之后返回char *,可以修改
*/
获取std::string类型的内容指针建议使用 &test_string[0]
!其余方法不建议使用。
字符串终止问题
在C语言中字符串总是以'\0'
为终止;
但是在C++ String中,这个问题变得模糊起来;
案例1
std::string a = "abc";
std::string b = "a\0c";
std::cout<<a<<std::endl;
std::cout<<b<<std::endl;
--------------------------------
=> abc
=> a
事情很直观,且很正常
案例2
std::string a = "abc";
std::cout<<a<<std::endl;
a[1] = '\0';
std::cout<<a.length()<<std::endl;
std::cout<<a<<std::endl;
std::cout<<a.c_str()<<std::endl;
--------------------------------
=> abc
=> 3
=> ac
=> a
事情变得不一样了!
这里可以看出string的输出终止条件是字符串长度,即a.length()
所有通过指针,通过'\0'直接操控字符串终止,对于string类型不再奏效
我想这也是C++面向对象的一种体现之一,即所有的操作最好依赖于其成员函数(方法)