为什么在C++中使用std :: string而不是c风格的字符串?

Alo*_*ave 11 c++ string c-strings

"一个人应该总是使用std :: string而不是c风格的字符串(char *)"这是几乎所有在这里发布的源代码的建议.虽然建议无疑是好的,但正在解决的实际问题不允许详细阐述原因?建议的方面详细.这个问题是作为占位符.

一个好的答案应该包括以下几个方面(详细):

  1. 为什么要std::string在C++中使用c风格的字符串?
  2. 提到的做法有哪些缺点(如果有的话)#1
  3. 在提到的建议的反面#1是一个好的做法的情况是什么?

Mic*_*son 13

  1. std :: string管理自己的内存,因此您可以轻松地复制,创建和销毁它们.
  2. 您不能将自己的缓冲区用作std :: string.
  3. 您需要将ac字符串/缓冲区传递给期望获取缓冲区所有权的内容 - 例如第三方C库.