命名空间
变体
操作

std::basic_string<CharT,Traits,Allocator>::c_str

来自 cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
成员函数
元素访问
basic_string::c_str
迭代器
容量
修改器
搜索
操作
常量
非成员函数
I/O
比较
(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(直到 C++20)(C++20)
数值转换
(C++11)(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
字面量
帮助类
推导指南 (C++17)

 
const CharT* c_str() const;
(自 C++11 起 noexcept)
(自 C++20 起 constexpr)

返回指向空终止字符数组的指针,该数组的数据等效于存储在字符串中的数据。

该指针使得范围 [c_str()c_str() + size()] 有效,并且其中的值对应于存储在字符串中的值,最后一个位置之后有一个额外的空字符。

c_str() 获取的指针可能会被以下情况使无效:

通过 c_str() 访问的字符数组的写操作是未定义的行为。

c_str()data() 执行相同的函数。

(自 C++11 起)

内容

[编辑] 参数

(无)

[编辑] 返回值

指向底层字符存储的指针。

c_str()[i] == operator[](i) 对于 i 中的每个 [0size())

(直到 C++11)

c_str() + i == std::addressof(operator[](i)) 对于 i 中的每个 [0size()]

(自 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*)
访问最后一个字符
(公共成员函数) [编辑]
返回指向字符串第一个字符的指针
(公共成员函数) [编辑]