std :: string :: c_str和std :: string :: data有什么区别?

fbr*_*eto 15 c++ stdstring c-str

我为什么要打电话std::string::data()过来std::string::c_str()?当然,这里标准的疯狂有一些方法......

Jer*_*fin 18

c_str()保证NUL终止.data()没有.

  • @Zifre:它们可能指向相同的地址,但是在变异操作(str + ="...")之后,实现可能会使内部数据缓冲区没有空终止,并且仅在添加'\ 0'时调用c_str()方法. (6认同)
  • 请注意,从 C++11 开始,情况不再如此(data() 与 c_str() 相同) (2认同)

R S*_*hko 5

c_str()返回一个指向数据的指针,并附加一个NUL字节,因此您可以将返回值用作"C字符串".

data()返回指向数据的指针而不做任何修改.

如果您使用的代码假定字符串是NUL终止的(例如为处理C字符串而编写的任何函数),请使用c_str().