std::string
C++11 では、が連続しており、ヌルで終了していることが保証されていることがわかっています (または、より厳密に言えばcharT()
、 の場合char
はヌル文字 0 で終了します)。
ポインターで文字列を埋めるために使用する必要があるこの C API があります。文字列全体 + null ターミネータを書き込みます。C++03 では、常に a を使用せざるを得ませんでした。これは、それが連続しているか、null で終了しvector<char>
ていると想定できなかったためです。string
しかし、C++11 では (basic_string
一部の標準ライブラリではまだ不安定なクラスが適切に準拠していると仮定して)、可能です。
それともできますか?私がこれを行うとき:
std::string str(length);
length+1
文字列は、null ターミネータによって埋められた最後のバイトを割り当てます。それは良い。しかし、これを C API に渡すと、length+1
文字が書き込まれます。null ターミネータを上書きします。
確かに、null-terminatorを null character で上書きします。これが機能する可能性は十分にあります (実際、どのように機能しないか想像できません)。
しかし、私は何が「機能する」かは気にしません。仕様に従って、null ターミネータを null 文字で上書きしてもよいかどうかを知りたいですか?