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++面向对象的一种体现之一,即所有的操作最好依赖于其成员函数(方法)

山和山不相遇,人与人要相逢