web-dev-qa-db-ja.com

<string.h>または<string>?

標準のヘッダーstring.hをC++プロジェクトに含めるための最良の方法はどれですか?次のように、最後に[dot] hを使用します。

#include <string.h>

または単に書く

#include <string>

または、多分、私が知らない別の方法を使用していますか?

ありがとう!

22
Overflowh

これらは2つの異なるヘッダーです。

  • _<string>_はc ++用です_std::string_クラス
  • _<string.h>_はc文字列関数(strlen()など)用であり、c ++プロジェクトの場合は_<cstring>_である必要があります(これは3番目であり、あなたは知りませんでした)。

そのかなり違う!

<string.h>Cスタイルの文字列用のこのライブラリ

<string> C++文字列の場合

c ++の標準では、<cstring>の代わりに<string.h>を使用する必要があります

7
triclosan

Wiki 言います:

C++標準ライブラリには、「。h」で終わるISO C90 C標準ライブラリの18個のヘッダーも組み込まれていますが、それらの使用は非推奨です。 C++標準ライブラリ内の他のすべてのヘッダーDO NOTは「.h」で終わります。

C標準ライブラリの各ヘッダーは、.hを削除し、先頭に「c」を追加することによって生成された、異なる名前でC++標準ライブラリに含まれています。たとえば、「time.h」は「ctime」になります。

2
Sadique

string is c ++ stl headfileは、テンプレートクラス「string」を提供しますstring.h is c標準headfileは、使用する多くの関数を提供します。 strlen strcpymemcpyのように。グローブ名前空間を使用しない名前空間stdで使用する場合、またはstring.hを使用しない場合は、代わりにcstringを使用できます。

1
cwh5635

*.hヘッダーファイルは多くの場合Cヘッダーファイルであり、おそらくextern "C" { ... }ラッピングを使用してC++で使用できます。

*.hのないヘッダーは通常、正規のC++ヘッダーです。

これは経験則のみです。

最新および以前のC++標準(c ++ 11、C++ 03)は、<cstdio>のようなヘッダーを定義して、名前空間などを使用して元のCヘッダーを適切にラップします。