std::basic_string<CharT,Traits,Allocator>::c_str
From 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*) |
最初の文字にアクセスする (public member function) |
| (DR*) |
最後の文字にアクセスする (public member function) |
| 文字列の最初の文字へのポインタを返す (public メンバ関数) |