为什么我会想要调用 std::string::data()
而不是 std::string::c_str()
?肯定标准中有一些方法的疯狂。
为什么我会想要调用 std::string::data()
而不是 std::string::c_str()
?肯定标准中有一些方法的疯狂。
c_str() 保证以NUL结尾。而data()则不保证。
c_str() 返回一个指向数据的指针,并附加一个NUL字节,以便您可以将返回值用作“C字符串”。
data() 返回指向数据的指针,没有任何修改。
如果您使用的代码假定字符串以NUL终止(例如任何编写以处理C字符串的函数),请使用c_str()。
现在在 MS STL 10.0 中似乎没有任何区别,因为我在头文件中看到了这个:
...\Microsoft Visual Studio 10.0\VC\include\xstring
const _Elem *c_str() const
{ // return pointer to null-terminated nonmutable array
return (_Myptr());
}
const _Elem *data() const
{ // return pointer to nonmutable array
return (c_str());
}
所以它们返回相同的内容。