web-dev-qa-db-fra.com

Différence entre <string> et <string.h>?

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>

?

45
Valmond
  • <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.
67
Ajay

string.h est un en-tête C et non un en-tête C++, point!

17
Prasoon Saurav

<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.

16
matiu

string.h est le fichier d'en-tête de C tandis que string est le fichier d'en-tête de C++.

10
Abhijeet Rastogi

<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.

8
Nicol Bolas

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

5
Sanish

Je crois <string.h> est juste utilisé pour C et <string> pour C++. Donc, y compris string.h ne fonctionnera pas.

2
jpstrube

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>.

2
Zeta

<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.

0
PankajSingh