重複の可能性:
文字列 c_str() と data()
C++ クラスをレガシ C コードで動作させるために、以前はstrncpy(dest, src_string, 32)
に変換std::string
していました。char[32]
しかし、std::string のc_str()
メソッドは常に null で終わる文字列を返しますか?
重複の可能性:
文字列 c_str() と data()
C++ クラスをレガシ C コードで動作させるために、以前はstrncpy(dest, src_string, 32)
に変換std::string
していました。char[32]
しかし、std::string のc_str()
メソッドは常に null で終わる文字列を返しますか?
std::string の c_str() メソッドは常に null で終わる文字列を返しますか?
はい。
その仕様は次のとおりです。
戻り値: for each inの
p
ようなポインター。p + i == &operator[](i)
i
[0,size()]
i
に指定された範囲は閉じていることに注意してください。これsize()
は有効なインデックスであり、文字列の末尾を超えた文字を参照します。
operator[]
は次のように指定されます。
戻り値:の
*(begin() + pos)
場合、それ以外の場合は値を持つpos < size()
型のオブジェクトへの参照T
charT()
の場合、これはso isstd::string
のエイリアスであり、構築された値の値は 0 です。したがって、 の結果が指す文字配列はゼロで終了します。std::basic_string<char>
charT
char
char
std::string::c_str()
c_str は「C 文字列」を返します。また、C 文字列は常にヌル文字で終了します。これは C 標準です。
これによると、答えはイエスです。