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

Val*_*ond 47 c++ string header header-files

怎么来这个代码

std::map <std::string , int> m;
m["a"]=1;
Run Code Online (Sandbox Code Playgroud)

编译(我正在使用MSVC 2010)

#include <string>
Run Code Online (Sandbox Code Playgroud)

但没有

#include <string.h>
Run Code Online (Sandbox Code Playgroud)

Aja*_*jay 68

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

  • 还应该注意,在C++中不推荐使用`string.h`.如果你需要其中包含的功能,你应该使用标题`cstring`.这或多或少完全绕过了"这两者之间有什么区别"的问题,因为很明显一个来自C库. (26认同)

Pra*_*rav 17

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

  • 我认为,最好换句话说:`<string>是C++标题,而不是C标题 (17认同)

mat*_*tiu 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>通常会将所有内容导入全局命名空间.根据我的谷歌搜索,它似乎依赖于你正在使用的库实现.

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

  • `<cstring>`不是`<string.h>`的同义词.`cstring`将东西放在`std`命名空间中(它也可能将它们留在`std`命名空间之外),而`<string.h>`则不然. (2认同)

Abh*_*ogi 12

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

  • `&lt;string.h&gt;` 也可以被视为 C++ 头文件。:) (2认同)

Nic*_*las 9

<string.h>包含C库字符串函数.strlen,strcmp等等.

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

他们真的没有任何关系,除了他们都处理字符串.


San*_*ish 5

它们是完全不同的标题.

<string>是C++ string

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