我已经阅读了各种描述,std::string::c_str
包括多年来/几十年对 SO 提出的问题,
我喜欢这个描述的清晰:
返回一个指向数组的指针,该数组包含一个以空字符结尾的字符序列(即一个 C 字符串),表示字符串对象的当前值。此数组包含构成字符串对象值的相同字符序列,以及末尾的附加终止空字符 ('\0')。
然而,关于这个函数的目的的一些事情仍然不清楚。
您可能会认为调用可能会在存储在主机对象 ( ) 的内部 char 数组中的字符串末尾c_str
添加一个字符,这是可以原谅的:\0
std::string
s[s.size+1] = '\0'
但似乎std::string
对象在调用之前默认为 Null 终止c_str
:
看完定义后:
const _Elem *c_str() const _NOEXCEPT
{ // return pointer to null-terminated nonmutable array
return (this->_Myptr());
}
我没有看到任何会添加\0
到 char 数组末尾的代码。据我所知c_str
,只是返回一个指向存储在数组第一个元素中的 char 的指针,就像这样begin()
做一样。我什至没有看到检查内部数组是否被终止的代码\0
还是我错过了什么?