问题
How come this code
std::map <std::string , int> m;
m[\"a\"]=1;
compiles with (I\'m using MSVC 2010)
#include <string>
but not with
#include <string.h>
?
回答1:
<string.h>
contains old functions likestrcpy
,strlen
for C style null-terminated strings.<string>
primarily contains thestd::string
,std::wstring
and other classes.
回答2:
string.h
is a C header not a C++ header, period!
回答3:
<string.h>
is cstring - http://www.cplusplus.com/reference/clibrary/cstring/
<string>
is the c++ string class - http://www.cplusplus.com/reference/string/
Edit per Nicol Bolas comment below and a bit of googling:
<cstring>
will usually import the same things as <string.h>
but into the std
namespace.
<string.h>
will usually import everything into the global namespace.
It appears to depend on the library implementation you're using though according to my googling.
Personally I only ever use <cstring>
if I need C style string helpers.
回答4:
string.h
is C's header file while string
is C++'s header file.
回答5:
<string.h>
contains C-library string functions. strlen
, strcmp
, etc.
<string>
contains the definition for std::basic_string
, which has the typedefs std::string
and std::wstring
. That's the difference.
They really have no relationship at all, outside of the fact that they both deal with strings.
回答6:
They are entirely different headers.
<string>
is C++ string
class
<string.h> or <cstring>
defines functions to manipulate C strings and arrays
回答7:
As stated, string.h
and cstring
are C headers (while cstring
is basically a C++ wrapper for string.h
), containing functions for C strings, which are char[]
terminated by '\0'
. You want to use the c++ class string, which header is <string>
.
回答8:
I believe <string.h>
is just used for C and <string>
for C++. So including string.h
wont work.
回答9:
<string.h>
is a C standard library header while <string>
is a cpp in fact all the c standard header files have .h
extension an non of cpp have .h
.
来源:https://stackoverflow.com/questions/9257665/difference-between-string-and-string-h