2012-02-13 30 views

Odpowiedz

55
  • <string.h> zawiera stare funkcje jak strcpy, strlen dla C stylu NUL łańcuchów.
  • <string> zawiera przede wszystkim std::string, std::wstring i inne klasy.
+21

Należy również zauważyć, że użycie 'string.h' jest przestarzałe w C++. Jeśli potrzebujesz funkcjonalności zawartej w sobie, powinieneś użyć nagłówka 'cstring'. To mniej lub bardziej całkowicie pomija kwestię "Jaka jest różnica między tymi dwoma", ponieważ jest bardzo oczywiste, że jedno pochodzi z biblioteki C. –

10

string.h to plik nagłówkowy C, a string jest plikiem nagłówkowym C++.

+1

'' można uznać nagłówek pliku C++ również. :) – iammilind

+0

Nie! należy używać z C++. –

19

string.h to nagłówek C, a nie nagłówek C++, kropka!

+0

Czy masz na myśli to, że kiedy robię kilka plików .h/.cpp, powinienem usunąć .h lub czy jest to odpowiedź tylko dla euh, jak pliki sdk? – Valmond

+13

Myślę, że lepiej powiedzieć inaczej: " jest nagłówkiem C++, a nie nagłówkiem C." – iammilind

15

<string.h> jest cstring - http://www.cplusplus.com/reference/clibrary/cstring/

<string> jest klasa C++ ciąg - http://www.cplusplus.com/reference/string/

Edycja za Nicol Bolas komentarz poniżej i trochę googlowania:

<cstring> zazwyczaj importować te same rzeczy jak <string.h> ale do przestrzeni nazw std. <string.h> zazwyczaj zaimportuje wszystko do globalnej przestrzeni nazw. Wygląda na to, że zależy to od implementacji biblioteki, której używasz, zgodnie z moimi metodami googlowania.

Osobiście używam tylko <cstring>, jeśli potrzebuję pomocników w stylu C.

+2

'' nie jest synonimem ''. 'cstring' umieszcza rzeczy w przestrzeni nazw' std' (może również pozostawić je poza obszarem nazw 'std'), natomiast' 'nie. –

+1

Używanie nagłówków '.h' w stylu C jest przestarzałe w C++. –

+0

@PrasoonSaurav Aby zostać uznanym za przestarzałego, musiałby on być częścią standardu na samym początku, czego nigdy nie było. –

8

zawiera funkcje ciągów biblioteki C. strlen, strcmp itp

<string> zawiera definicję std::basic_string, który posiada typedefs std::string i std::wstring. Taka jest różnica.

Naprawdę nie mają żadnego związku, poza tym, że oboje mają do czynienia ze strunami.

2

Wierzę, że <string.h> jest właśnie używany dla C i <string> dla C++. Więc w tym string.h nie będzie działać.

2

Jak stwierdzono, string.h i cstring są nagłówki C (przy cstring jest zasadniczo C++ opakowującym string.h) zawierający funkcje łańcuchów C, które char[] zakończone '\0'. Chcesz użyć łańcucha klasy C++, którego nagłówek to <string>.

5

Są to zupełnie różne nagłówki.

<string> jest C++ string klasa

<string.h> or <cstring> definiuje funkcje do manipulowania ciągi C i tablice

Powiązane problemy