2013-07-22 14 views
7

私たちは皆、C文字列の最後に自動的にヌル文字が付いていることを知っています... C++文字列オブジェクトについてはどうですか?最後にヌル文字もありますか?C++の文字列オブジェクトの末尾にヌル文字がありますか?

ありがとうございました!

+3

'null'!=' NUL'! – trojanfoe

+0

関連:http://stackoverflow.com/questions/6077189/will-stdstring-always-be-null-terminated-in-c11 – jogojapan

答えて

4

std::stringは非常に多く、std::vectorです。これは長さ属性を持ち、C++ 03でゼロ終了しません。 C++ 11では `std :: string 'は終了しているようですが、` std :: string'を文字の `std :: vector 'と考えるだけです。

+3

さらに、 'c_str()'を使用してCタイプの終了文字列を得ることができます。 – Naveen

+4

「ノー」ほど簡単ではありません。 '[begin()、end())'の間にヌル終了がある必要はありませんが、 'c_str()'と 'data()'の両方がnullで終わる配列へのポインタを返します。 – juanchopanza

+0

@juanchopanzaそれはC++ 11のみです。 –

-1

のstd ::文字列::データ

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

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

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

+4

C++ 11では、 'data()'と 'c_str()'は実際には同じです。 。 –

+1

+1 @CoryNelsonありがとう、Cx11 std :: string :: data:文字列オブジェクトの現在の値を表すヌルで終了する文字列(つまりC文字列)を含む配列へのポインタを返します。 この配列には、文字列オブジェクトの値を構成するのと同じ文字列と、末尾に付加的な終了ヌル文字( '\ 0')が含まれます。 戻されたポインタは、文字列オブジェクトがその値に一致する文字を格納するために現在使用されている内部配列を指します。 string :: dataとstring :: c_strの両方が同義語で、同じ値を返します。 –

9

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

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

+0

それで、どの言語にインターフェイスしたいのですか? C関数へのインタフェースが必要な場合は、c_str()を使用して、NULLで終了する文字配列へのポインタを取得します。別のC++関数とのインタフェースが必要な場合は、おそらくstd :: stringを期待しています。これは、NULLで終了することが保証されていません(C++ 2003も必要です)。 – Keplerian

+1

@Keplerian: 'const char *'を使ってASCIIZバッファを期待するC関数を呼び出すときに 'c_str()'を使用し、 '&s [0]、s.size()バッファの内容を変更しようとするC関数に 'char *'と 'size_t'を渡しますが、C++ 11ではNUL終端が保証されていませんので、まず'!s.empty() 'をチェックして' &s [0] '未定義の動作です。 'std :: string'を期待する他のC++関数については、おそらく' .size() '、' .end() 'などを使ってNUL終了について何も約束する必要はありません。 –

+0

See [私の答えはこちら](http://stackoverflow.com/questions/347949/how-to-convert-a-stdstring-to-const-char-or-char/4152881#4152881)。 –

関連する問題