2012-02-13 28 views
33

どうしてこのコード<string>と<string.h>の違いは?

std::map <std::string , int> m; 
m["a"]=1; 

#include <string.h> 

#include <string> 

ではなく、(私はMSVC 2010を使用しています)でコンパイル? stringはC++のヘッダファイルである

答えて

55
  • <string.h>は、Cスタイルのnull終端文字列のstrlenstrcpyのような古い機能が含まれています。
  • <string>は主にstd::stringstd::wstringや他のクラスが含まれています。
+21

'string.h'を使うことはC++では廃止されていることにも注意してください。内部に含まれる機能が必要な場合は、ヘッダ 'cstring'を使用する必要があります。これは、Cライブラリの方が非常に明白だから、「これらの2つの違いは何ですか?」という問題をほぼ完全に回避しています。 –

10

string.hはCのヘッダファイルです。

+1

'' またC++ヘッダファイルと考えることができるを操作する関数を定義するクラスC++ stringです。 :) – iammilind

+0

いいえ! はC++で使用されます。 –

19

string.hはCヘッダーではないC++ヘッダ、期間です!

+0

あなたは、いくつかのファイルを実行するときに.h/.cpp私は.hを削除するか、sdkファイルのようにeuhのためのあなたの答えですか? – Valmond

+13

私は、それ以外の言い方をする方が良いと思います。 'はCヘッダであり、Cヘッダではありません。' – iammilind

15

<string.h>のCStringされる - http://www.cplusplus.com/reference/clibrary/cstring/

<string>は、C++文字列クラスである - http://www.cplusplus.com/reference/string/

以下ニコルボーラコメントあたりの編集やグーグルのビット:

<cstring>通常<string.h>と同じものをインポートしますstd名前空間に追加します。 <string.h>は、通常、すべてをグローバル名前空間にインポートします。 私のグーグルによれば、使用しているライブラリの実装に依存するようです。私はCスタイルの文字列ヘルパーが必要な場合

個人的に私は今まで<cstring>を使用しています。

+2

は、と同義ではありません。 'cstring'は' std'名前空間に物を入れます( 'std'名前空間の外に出るかもしれません)。一方、 ''はそうではありません。 –

+1

Cスタイルの '.h'ヘッダは、C++では廃止予定です。 –

+0

@PrasoonSauravこれは、それが決してなかった標準の一部であったはずです。 –

8

<string.h>は、Cライブラリの文字列関数が含まれています。 strlenstrcmpなど

<string>はtypedefでstd::stringstd::wstringを持ってstd::basic_stringの定義が含まれています。それは違いです。

彼らは実際には文字列を扱うという事実の外では全く関係がありません。

2

私は<string.h>がちょうどCおよびC++のための<string>のために使用されていると信じています。だからstring.hは役に立たない。

2

述べたように、string.hcstring'\0'によって終了char[]であるCストリングのための関数を含むCヘッダー(cstringは基本的string.hためのC++ラッパーである)、です。 C++クラス文字列を使用したい場合は、ヘッダは<string>です。

5

完全に異なるヘッダーです。

<string>

<string.h> or <cstring>はC文字列とアレイ

関連する問題