ホームページ  >  記事  >  バックエンド開発  >  C 11 の `string::c_str()` はまだ Null で終了していますか?

C 11 の `string::c_str()` はまだ Null で終了していますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 00:52:02316ブラウズ

Is C  11's `string::c_str()` Still Null-Terminated?

C 11 の string::c_str() は Null 終了を排除しますか?

C 11 では、string::c_str はもはやヌル終了を保証しませんnull で終了する文字列を生成します。

Reason:

C 11 では、string::c_str は string::data と同一として定義され、さらに string::data が定義されます。 0

結果:

これは、string::c_str() が返されなくなる可能性があることを意味します。 null で終了する文字列であり、そのような終了を想定したシナリオでは潜在的なエラーが発生します。

解決策:

解決策は、string::c_str() を次の場合にのみ使用することです。従来のコードとの互換性。新しいコードの場合は、代わりに string::data() を使用してください。 string::data() は null で終了する文字列を返しませんが、内部で null で終了することが保証されている基になるバッファへのポインタを返します。

実装の詳細:

内部的には、文字列は null で終了するバッファーを使用する必要があります。セクション 21.4.5 の Operator[] 定義では、size()

追加の注意事項:

  • &operator[](0) は c_str() の同義語として使用できます。
  • 終端の null 文字は同じ中になければなりません*(p size()) は charT() と等しくなければならないため、文字列データとしてバッファーを使用します。したがって、Null 文字が遅延初期化されたとしても、中間状態のバッファを観察することはできません。

以上がC 11 の `string::c_str()` はまだ Null で終了していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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