Comment se fait-il que ce code
std::map <std::string , int> m;
m["a"]=1;
compile avec (j'utilise MSVC 2010)
#include <string>
mais pas avec
#include <string.h>
?
<string.h>
contient d'anciennes fonctions telles que strcpy
, strlen
pour les chaînes à terminaison nulle de style C.<string>
contient principalement le std::string
, std::wstring
et autres classes.string.h
est un en-tête C et non un en-tête C++, point!
<string.h>
est cstring - http://www.cplusplus.com/reference/clibrary/cstring/
<string>
est la classe de chaîne c ++ - http://www.cplusplus.com/reference/string/
Modifier par Nicol Bolas commentaire ci-dessous et un peu de googler:
<cstring>
importera généralement les mêmes choses que <string.h>
mais dans l'espace de noms std
. <string.h>
importera généralement tout dans l'espace de noms global. Il semble que cela dépende de l'implémentation de la bibliothèque que vous utilisez, selon mes recherches sur Google.
Personnellement, je n'utilise que <cstring>
si j'ai besoin d'aides de chaîne de style C.
string.h
est le fichier d'en-tête de C tandis que string
est le fichier d'en-tête de C++.
<string.h>
contient les fonctions de chaîne de la bibliothèque C. strlen
, strcmp
, etc.
<string>
contient la définition de std::basic_string
, qui a les typedefs std::string
et std::wstring
. Voilà la différence.
Ils n'ont vraiment aucune relation, à part le fait qu'ils traitent tous les deux avec des cordes.
Ce sont des en-têtes entièrement différents.
<string>
est la classe C++ string
<string.h> or <cstring>
définit les fonctions permettant de manipuler les chaînes et les tableaux C
Je crois <string.h>
est juste utilisé pour C et <string>
pour C++. Donc, y compris string.h
ne fonctionnera pas.
Comme indiqué, string.h
et cstring
sont des en-têtes C (tandis que cstring
est essentiellement un wrapper C++ pour string.h
), contenant des fonctions pour les chaînes C, qui sont char[]
terminé par '\0'
. Vous souhaitez utiliser la chaîne de classe c ++, dont l'en-tête est <string>
.
<string.h>
est un en-tête de bibliothèque standard C tandis que <string>
est un cpp en fait tous les fichiers d'en-tête c standard ont .h
extension et non cpp ont .h
.