2012-02-13 24 views

Respuesta

55
  • <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.
+21

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

10

string.h es el archivo de encabezado de C, mientras que string es el archivo de encabezado de C++.

+1

'' puede considerarse archivo de cabecera C++ también. :) – iammilind

+0

¡No! se debe usar con C++. –

19

string.h es un encabezado C no un encabezado C++, punto!

+0

¿Quiere decir que cuando hago un par de archivos .h/.cpp debería eliminar la .h o su respuesta es solo para euh, como archivos sdk? – Valmond

+13

Creo que es mejor decirlo de otra manera: ' es encabezado C++, no un encabezado C' – iammilind

15

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

+2

'' no es un sinónimo de ''. 'cstring' coloca cosas en el espacio de nombres' std' (también puede dejarlos fuera del espacio de nombres 'std'), mientras que' 'no. –

+1

El uso de encabezados '.h' de estilo C está obsoleto en C++. –

+0

@PrasoonSaurav Para ser obsoleto tendría que haber sido parte del estándar para empezar, que nunca fue. –

8

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

2

Creo que <string.h> se acaba de utilizar para C y <string> para C++. Así que incluir string.h no funcionará.

2

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

5

Son encabezados completamente diferentes.

<string> es C++ string clase

<string.h> or <cstring> define funciones para manipular cadenas de C en matrices

Cuestiones relacionadas