std::basic_string<CharT,Traits,Allocator>:: c_str
|
const
CharT
*
c_str
(
)
const
;
|
(noexcept начиная с C++11)
(constexpr начиная с C++20) |
|
Возвращает указатель на нуль-терминированный массив символов с данными, эквивалентными хранящимся в строке.
Указатель таков, что диапазон
[
c_str
(
)
,
c_str
(
)
+
size
(
)
]
является действительным, и значения в нём соответствуют значениям, хранящимся в строке, с дополнительным нулевым символом после последней позиции.
Указатель, полученный из
c_str()
, может стать недействительным из-за:
- Передача неконстантной ссылки на строку любой функции стандартной библиотеки, или
- Вызов неконстантных функций-членов строки , за исключением 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*
)
|
обращается к последнему символу
(публичная функция-член) |
|
возвращает указатель на первый символ строки
(публичная функция-член) |