9

C文字列の末尾にnull文字が自動的に付加されることは誰もが知っています...C++文字列オブジェクトはどうですか? 最後にヌル文字もありますか?

どうもありがとう!

4

3 に答える 3

9

C++03 では、std::string を NUL で終了するバッファーに格納する必要はありませんでしたが、呼び出すc_str()と、NUL で終了するバッファーへのポインターが返されます。そのバッファは、c_str()呼び出し内で合法的に作成および/または終了できます。

C++11 では、すべてのstd::stringインスタンスが終了するためdata()、NUL で終了するバッファーもアドレス指定s[s.size()]し、終了する NUL への参照を返す明確に定義された意味さえ持ちます。

于 2013-07-22T05:43:21.960 に答える
4

std::stringこれは非常に重要ですstd::vector。長さ属性があり、C++03 ではゼロで終了していません。C++11 では、'std::string' は終了しているように見えますが、'std::string' は単なる終了バッファーではなく、文字の 'std::vector' と考える方が簡単だと思います。

于 2013-07-22T05:30:15.307 に答える
-1

std::string::data

文字列オブジェクトの値を構成する文字と同じ文字シーケンスを含む配列へのポインターを返します。

data()+size() で値にアクセスすると、未定義の動作が発生します。この関数によって返される値が指す文字シーケンスがヌル文字で終了するという保証はありません。そのような保証を提供する関数については、string::c_str を参照してください。

プログラムは、このシーケンスの文字を変更してはなりません。

于 2013-07-22T05:34:08.180 に答える