C文字列の末尾にnull文字が自動的に付加されることは誰もが知っています...C++文字列オブジェクトはどうですか? 最後にヌル文字もありますか?
どうもありがとう!
C++03 では、std::string を NUL で終了するバッファーに格納する必要はありませんでしたが、呼び出すc_str()
と、NUL で終了するバッファーへのポインターが返されます。そのバッファは、c_str()
呼び出し内で合法的に作成および/または終了できます。
C++11 では、すべてのstd::string
インスタンスが終了するためdata()
、NUL で終了するバッファーもアドレス指定s[s.size()]
し、終了する NUL への参照を返す明確に定義された意味さえ持ちます。
std::string
これは非常に重要ですstd::vector
。長さ属性があり、C++03 ではゼロで終了していません。C++11 では、'std::string' は終了しているように見えますが、'std::string' は単なる終了バッファーではなく、文字の 'std::vector' と考える方が簡単だと思います。
std::string::data
文字列オブジェクトの値を構成する文字と同じ文字シーケンスを含む配列へのポインターを返します。
data()+size() で値にアクセスすると、未定義の動作が発生します。この関数によって返される値が指す文字シーケンスがヌル文字で終了するという保証はありません。そのような保証を提供する関数については、string::c_str を参照してください。
プログラムは、このシーケンスの文字を変更してはなりません。