web-dev-qa-db-ja.com

<cstring>と<string>の違い

今日(実際には昨日のタイムゾーンのため)昨日、Interview StreetのC++でVisual Studio 2012g ++を使用)を使用してプログラミングインタビューを試みました。

簡単に言うと、いくつかのコンパイルエラーに遭遇しました1 私が使っていたとき

#include <cstring>

質問の1つでスケルトンコードによって提供され、

#include <string>

すべてのコンパイルエラーが魔法のように消えました。

ただし、インタビューストリートに提出すると、cを追加し直す必要がありました。そうしないと、コンパイルエラーが発生しました。

非標準化に噛まれたのは初めてでした。

私の質問は:<string><cstring>の中では30分以上(貴重な)かかったものは何ですか?


1 好奇心が強い人には:

using <cstring>が次の場合、Visual Studio 2012による1つのエラー:

エラーC2338:C++標準はこのタイプのハッシュを提供しません。

c:\ program files(x86)\ Microsoft visual studio 11.0\vc\include\xstddef

unordered_mapのキーとしてstringの場合

using <string>が次の場合、g ++による1つのエラー:

'strlen'はこのスコープで宣言されていません

47
Dante May Code

cstringヘッダーは、Cスタイルの文字列を処理するための関数を提供します-文字のヌル終了配列。これには、strlenstrcpyなどの関数が含まれます。 Cの古典的なstring.hヘッダーのC++バージョンです。

stringヘッダーは、std::stringクラスおよび関連する関数と演算子を提供します。

ヘッダーの名前は似ていますが、それ以上に関連しているわけではありません。それらは別々のタスクをカバーします。

43
Rob Kennedy

<cstring>には、Cヘッダーstring.hからのCストリングコードがあります。 C++には、Cヘッダーが同じベース名を持つという規則があります。ただし、先頭のcがあり、末尾の.hはありません。すべてのコンテンツは、std::名前空間で利用できます。

<string> には標準ライブラリがあります std::string および関連関数

6
juanchopanza

C++では、#include <somefile.h>を使用せず、代わりに#include <somefile>を使用します。現在、C++の文字列クラスは<string>にありますが、c-string関数も使用できます。これは<string.h>にあります。 C++は「従来の」c-インクルードファイルに使用します。したがって、<cstring>および<string>

http://www.cplusplus.com/reference/clibrary/cstring/

4