std::basic_string<CharT,Traits,Allocator>::c_str
来自 cppreference.com
< cpp | string | basic string
const CharT* c_str() const; |
(自 C++11 起 noexcept) (自 C++20 起 constexpr) |
|
返回指向空终止字符数组的指针,该数组的数据等效于存储在字符串中的数据。
该指针使得范围 [
c_str(),
c_str() + size()]
有效,并且其中的值对应于存储在字符串中的值,最后一个位置之后有一个额外的空字符。
从 c_str()
获取的指针可能会被以下情况使无效:
- 将字符串的非 const 引用传递给任何标准库函数,或
- 调用字符串上的非 const 成员函数,不包括 operator[]、at()、front()、back()、begin()、rbegin()、end() 和 rend()(自 C++11 起).
通过 c_str()
访问的字符数组的写操作是未定义的行为。
|
(自 C++11 起) |
内容 |
[编辑] 参数
(无)
[编辑] 返回值
指向底层字符存储的指针。
c_str()[i] == operator[](i) 对于 |
(直到 C++11) |
c_str() + i == std::addressof(operator[](i)) 对于 |
(自 C++11 起) |
[编辑] 复杂度
常数。
[编辑] 注意
只有当字符串对象不包含其他空字符时,才能将从 c_str()
获取的指针视为指向空终止字符字符串的指针。
[编辑] 示例
运行此代码
#include <algorithm> #include <cassert> #include <cstring> #include <string> extern "C" void c_func(const char* c_str) { printf("c_func called with '%s'\n", c_str); } int main() { std::string const s("Emplary"); const char* p = s.c_str(); assert(s.size() == std::strlen(p)); assert(std::equal(s.begin(), s.end(), p)); assert(std::equal(p, p + s.size(), s.begin())); assert('\0' == *(p + s.size())); c_func(s.c_str()); }
输出
c_func called with 'Emplary'
[编辑] 另请参阅
(DR*) |
访问第一个字符 (公共成员函数) |
(DR*) |
访问最后一个字符 (公共成员函数) |
返回指向字符串第一个字符的指针 (公共成员函数) |