どうしてこのコード<string>と<string.h>の違いは?
std::map <std::string , int> m;
m["a"]=1;
#include <string.h>
と
#include <string>
ではなく、(私はMSVC 2010を使用しています)でコンパイル? string
はC++のヘッダファイルである
どうしてこのコード<string>と<string.h>の違いは?
std::map <std::string , int> m;
m["a"]=1;
#include <string.h>
と
#include <string>
ではなく、(私はMSVC 2010を使用しています)でコンパイル? string
はC++のヘッダファイルである
<string.h>
は、Cスタイルのnull終端文字列のstrlen
をstrcpy
のような古い機能が含まれています。<string>
は主にstd::string
、std::wstring
や他のクラスが含まれています。string.h
はCのヘッダファイルです。
'' string
です。 :) –
iammilind
いいえ!
<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>
を使用しています。
Cスタイルの '.h'ヘッダは、C++では廃止予定です。 –
@PrasoonSauravこれは、それが決してなかった標準の一部であったはずです。 –
<string.h>
は、Cライブラリの文字列関数が含まれています。 strlen
、strcmp
など
<string>
はtypedefでstd::string
とstd::wstring
を持ってstd::basic_string
の定義が含まれています。それは違いです。
彼らは実際には文字列を扱うという事実の外では全く関係がありません。
私は<string.h>
がちょうどCおよびC++のための<string>
のために使用されていると信じています。だからstring.h
は役に立たない。
述べたように、string.h
とcstring
は'\0'
によって終了char[]
であるCストリングのための関数を含むCヘッダー(cstring
は基本的string.h
ためのC++ラッパーである)、です。 C++クラス文字列を使用したい場合は、ヘッダは<string>
です。
完全に異なるヘッダーです。
<string>
は
<string.h> or <cstring>
はC文字列とアレイ
'string.h'を使うことはC++では廃止されていることにも注意してください。内部に含まれる機能が必要な場合は、ヘッダ 'cstring'を使用する必要があります。これは、Cライブラリの方が非常に明白だから、「これらの2つの違いは何ですか?」という問題をほぼ完全に回避しています。 –