GeezerVison is showing cpprefjp.github.io — std::basic_string::c_str - cpprefjp C++日本語リファレンス
最終更新日時:
2026年08月27日 14時02分35秒 (JST)
Akira Takahashi
が更新
履歴
編集
function
<string>
std:: basic_string:: c_str
const charT * c_str () const ; // (1) C++98
const charT * c_str () const noexcept ; // (1) C++11
constexpr const charT * c_str () const noexcept ; // (1) C++20
概要
C 言語での文字列表現を取得する。
戻り値
C 言語で使用されている文字列表現である、NULL(つまり charT())で終端された文字配列の先頭へのポインタ(備考も参照)
例外
C++98 まで:規定なし
C++11 から:投げない
計算量
C++98 まで:規定なし
C++11 から:定数時間
備考
本メンバ関数で返されたポインタが指す配列の値を変更してはいけない。
本メンバ関数の呼び出しによる、対象オブジェクトの要素への既存の参照、ポインタ、イテレータの有効性への影響は以下の通りである。
C++98 まで:本メンバ関数を呼び出すと、対象オブジェクトの要素への既存の参照、ポインタ、イテレータは無効になる可能性がある。
C++11 から:本メンバ関数を呼び出しても、対象オブジェクトの要素への既存の参照、ポインタ、イテレータは無効にはならない。
本メンバ関数で返されたポインタは、以下のような操作により無効になる可能性がある。
本メンバが返すポインタは、長さが size () + 1 の charT 型の配列を指す。この配列は、最初の size () 要素は対象オブジェクトの文字列と等しく、最後の要素は NULL 文字、すなわち charT() である。
なお、C++11 からは、本メンバ関数が返すポインタを p とすると、範囲 [0, size ()] の全ての i について p + i == addressof (operator[](i)) を満たす。このことから、*end () == charT() を満たす。
対象オブジェクト内に NULL 文字があった場合、C 言語の文字列表現では正しく扱うことができないので注意すること。
data は、C++98 までは NULL で終端されていない文字配列へのポインタを返していたが、C++11 からは本メンバ関数と全く同じものとなった。
例
出力
Hello, world!
Hello
関連項目
参照