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++11 前) |
对于 |
(C++11 起) |
复杂度
常数。
注解
从 c_str()
获得的指针只能在字符串对象不含其他空字符时被当做指向空终止字符串的指针。
示例
运行此代码
#include <algorithm> #include <cassert> #include <cstring> #include <string> extern "C" void c_func(const char* c_str) { printf("以 '%s' 调用 c_func\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()); }
输出:
以 'Emplary' 调用 c_func
参阅
(DR*) |
访问首字符 (公开成员函数) |
(DR*) |
访问最后的字符 (公开成员函数) |
返回指向字符串首字符的指针 (公开成员函数) |