56

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

簡単に言うと、使用中にいくつかのコンパイルエラー1に遭遇しました

#include <cstring>

これは、質問の 1 つのスケルトン コードによって提供されたものであり、

#include <string>

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

しかし、Interview Street に提出した時点で、私は追加cしなければなりませんでした。そうしないと、コンパイルエラーが発生しました。

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

私の質問は次のとおりです。何が入っ<string>ていて、 <cstring>(貴重な)30分以上かかりましたか?


1気になる方へ

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

エラー C2338: C++ 標準は、この型のハッシュを提供していません。

c:\program files (x86)\microsoft Visual Studio 11.0\vc\include\xstddef

おそらくキーインstringとしてunordered_map

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

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

4

3 に答える 3

53

cstringヘッダーは、C スタイルの文字列 (null で終わる文字配列) を処理するための関数を提供します。これには、strlenや などの関数が含まれますstrcpystring.hこれは、C の従来のヘッダーの C++ バージョンです。

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

ヘッダーには似たような名前が付いていますが、それ以上の関連性はありません。それらは個別のタスクをカバーしています。

于 2012-10-10T17:03:51.347 に答える
7

<cstring>C ヘッダ string.h からの C 文字列コードを持っています。C++にはC、先頭cと末尾の.h. すべてのコンテンツはstd::名前空間の下で利用できます。

<string>標準ライブラリstd::stringと関連機能を持っています

于 2012-10-10T17:04:05.560 に答える
5

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

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

于 2012-10-10T17:03:51.580 に答える