web-dev-qa-db-ja.com

<string>と<string.h>の違いは?

このコードはどうして

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

コンパイル(MSVC 2010を使用しています)

#include <string>

ではなく

#include <string.h>

45
Valmond
  • <string.h>には、Cスタイルのヌル終了文字列のstrcpystrlenなどの古い関数が含まれています。
  • <string>には主にstd::stringstd::wstringおよびその他のクラス。
67
Ajay

string.hはC++ヘッダーではなく、Cヘッダーです。

17
Prasoon Saurav

<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>を使用します。

16
matiu

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

10

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

<string>には、std::basic_stringの定義が含まれます。この定義には、typedef std::stringおよびstd::wstringがあります。それが違いです。

両方とも文字列を処理するという事実以外は、実際にはまったく関係がありません。

8
Nicol Bolas

それらはまったく異なるヘッダーです。

<string>はC++ stringクラスです

<string.h> or <cstring>は、Cの文字列と配列を操作する関数を定義します

5
Sanish

私は信じている <string.h>は、Cおよび<string> C++の場合。したがって、string.h動作しません。

2
jpstrube

前述のように、string.hおよびcstringはCヘッダーです(cstringは基本的にstring.hのC++ラッパーです)。C文字列の関数はchar[]'\0'で終了しました。ヘッダーが<string>であるc ++クラス文字列を使用します。

2
Zeta

<string.h>はC標準ライブラリのヘッダーで、<string>は実際にはcppで、すべてのc標準ヘッダーファイルには.h cpp以外の拡張子は.h

0
PankajSingh