为什么这段代码
std::map <std::string , int> m;
m["a"]=1;
编译(我正在使用MSVC 2010)
#include <string>
但不是
#include <string.h>
答案 0 :(得分:65)
<string.h>
包含旧函数,如strcpy
,strlen
,用于C样式的以null结尾的字符串。 <string>
主要包含std::string
,std::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库字符串函数。 strlen
,strcmp
等
<string>
包含std::basic_string
的定义,其中包含typedef std::string
和std::wstring
。这就是区别。
他们之间根本没有任何关系,除了他们都处理字符串。
答案 5 :(得分:5)
它们是完全不同的标题。
<string>
是C ++ string
类
<string.h> or <cstring>
定义了操作C字符串和数组的函数
答案 6 :(得分:2)
我相信<string.h>
仅用于C和<string>
用于C ++。所以包括string.h
不会工作。
答案 7 :(得分:2)
如上所述,string.h
和cstring
是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 ++字符串类