<string>和<string.h>之间的区别?</string.h> </string>

时间:2012-02-13 08:48:52

标签: c++ string header header-files

为什么这段代码

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

编译(我正在使用MSVC 2010)

#include <string>

但不是

#include <string.h>

10 个答案:

答案 0 :(得分:65)

  • <string.h>包含旧函数,如strcpystrlen,用于C样式的以null结尾的字符串。
  • <string>主要包含std::stringstd::wstring和其他类。

答案 1 :(得分:17)

string.h是一个C头而不是C ++头,期间!

答案 2 :(得分:16)

<string.h>是cstring - http://www.cplusplus.com/reference/clibrary/cstring/

<string>是c ++字符串类 - http://www.cplusplus.com/reference/string/

编辑每个Nicol Bolas在下面发表评论并进行一些谷歌搜索:

<cstring>通常会将与<string.h>相同的内容导入std命名空间。 <string.h>通常会将所有内容导入全局命名空间。 根据我的谷歌搜索,它似乎依赖于你正在使用的库实现。

就个人而言,如果我需要C风格的字符串助手,我只会使用<cstring>

答案 3 :(得分:10)

string.h是C的头文件,而string是C ++的头文件。

答案 4 :(得分:8)

<string.h>包含C库字符串函数。 strlenstrcmp

<string>包含std::basic_string的定义,其中包含typedef std::stringstd::wstring。这就是区别。

他们之间根本没有任何关系,除了他们都处理字符串。

答案 5 :(得分:5)

它们是完全不同的标题。

<string>是C ++ string

<string.h> or <cstring>定义了操作C字符串和数组的函数

答案 6 :(得分:2)

我相信<string.h>仅用于C和<string>用于C ++。所以包括string.h不会工作。

答案 7 :(得分:2)

如上所述,string.hcstring是C头(而cstring基本上是string.h的C ++包装器),包含C字符串的函数,它们是{{ 1}}由char[]终止。您想使用c ++类字符串,标题为'\0'

答案 8 :(得分:0)

<string.h>是C标准库标头,而<string>是cpp,实际上所有c标准标头文件都具有.h扩展名,而cpp中没有.h的扩展名。 / p>

答案 9 :(得分:0)

string.h适用于C兼容的C ++字符串类 字符串用于纯c ++字符串类