¿Cómo es que este códigoDiferencia entre <string> y <string.h>?
std::map <std::string , int> m;
m["a"]=1;
compila con (estoy usando MSVC 2010)
#include <string>
pero no con
#include <string.h>
?
¿Cómo es que este códigoDiferencia entre <string> y <string.h>?
std::map <std::string , int> m;
m["a"]=1;
compila con (estoy usando MSVC 2010)
#include <string>
pero no con
#include <string.h>
?
<string.h>
contiene funciones viejos como strcpy
, strlen
para las cadenas terminadas en cero estilo C.<string>
contiene principalmente el std::string
, std::wstring
y otras clases.string.h
es el archivo de encabezado de C, mientras que string
es el archivo de encabezado de C++.
''
¡No!
string.h
es un encabezado C no un encabezado C++, punto!
<string.h>
se cstring - http://www.cplusplus.com/reference/clibrary/cstring/
<string>
es la clase C++ cadena - http://www.cplusplus.com/reference/string/
Editar por comentario Nicol Bolas abajo y un poco de google:
<cstring>
por lo general importar las mismas cosas que <string.h>
pero en el espacio de nombre std
. <string.h>
generalmente importará todo en el espacio de nombres global. Parece que depende de la implementación de la biblioteca que está utilizando, aunque según mi Google.
Personalmente, solo uso <cstring>
si necesito ayudantes de cadenas estilo C.
'
El uso de encabezados '.h' de estilo C está obsoleto en C++. –
@PrasoonSaurav Para ser obsoleto tendría que haber sido parte del estándar para empezar, que nunca fue. –
<string.h>
contiene funciones de cadena C-biblioteca. strlen
, strcmp
, etc.
<string>
contiene la definición para std::basic_string
, que tiene las typedefs std::string
y std::wstring
. Esa es la diferencia.
Realmente no tienen ninguna relación, aparte del hecho de que ambos se ocupan de las cadenas.
Creo que <string.h>
se acaba de utilizar para C y <string>
para C++. Así que incluir string.h
no funcionará.
como se dijo, string.h
y cstring
son cabeceras C (mientras cstring
es básicamente un C++ envoltura para string.h
), que contiene funciones para cadenas de C, que son char[]
terminado por '\0'
. Desea utilizar la cadena de clases de C++, cuyo encabezado es <string>
.
Son encabezados completamente diferentes.
<string>
es C++ string
clase
<string.h> or <cstring>
define funciones para manipular cadenas de C en matrices
También se debe tener en cuenta que el uso de 'string.h' está en desuso en C++. Si necesita la funcionalidad contenida dentro, debe usar el encabezado 'cstring'. Esto borra más o menos completamente el problema de "¿Cuál es la diferencia entre estos dos?" Porque es muy obvio que uno es de la biblioteca C. –