ホームページ  >  記事  >  バックエンド開発  >  C 11 の `c_str()` は依然として null で終了する文字列を返すことが保証されていますか?

C 11 の `c_str()` は依然として null で終了する文字列を返すことが保証されていますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-28 09:22:02256ブラウズ

Is `c_str()` in C  11 still guaranteed to return a null-terminated string?

C 11 の c_str() と Null で終わる文字列

C 11 では、basic_string::c_str() の定義により質問: まだ null で終わる文字列が生成されますか?

問題

C 11 では、basic_string::c_str は、basic_string::data と一致するように定義されています。これは、(begin() n) および (&*begin() n) と整列します。文字列の末尾に null 文字を使用する明示的な要件はありません。

答え

明示的な定義がないにもかかわらず、C 11 の文字列は次のことを行う必要があります。内部的にヌル終了バッファを使用します。これは、operator[]:

"Returns: pos

c_str はoperator[] に関して定義されており、c_str と data の両方が O(1) でなければならないため、実装では null で終了するバッファーを使用する必要があります。

追加の考慮事項

operator[] の戻り値要件は、&operator[](0) を使用して c_str() を取得できることを意味します。これは、終端の null 文字が同じバッファ内に存在する必要があることを意味します。したがって、ターミネータを遅延初期化しても、中間状態では観測できません。

結論

当初の想定に反して、C 11 の c_str() は次のようになります。 null で終了する文字列の生成が引き続き保証されているため、従来のコードとの互換性が確保され、効率的な文字アクセスが可能になります。

以上がC 11 の `c_str()` は依然として null で終了する文字列を返すことが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。