Dlaczego ten kodRóżnica między <string> i <string.h>?
std::map <std::string , int> m;
m["a"]=1;
kompiluje z (Używam MSVC 2010)
#include <string>
ale nie z
#include <string.h>
?
Dlaczego ten kodRóżnica między <string> i <string.h>?
std::map <std::string , int> m;
m["a"]=1;
kompiluje z (Używam MSVC 2010)
#include <string>
ale nie z
#include <string.h>
?
<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.string.h
to plik nagłówkowy C, a string
jest plikiem nagłówkowym C++.
''
Nie!
<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.
'
Używanie nagłówków '.h' w stylu C jest przestarzałe w C++. –
@PrasoonSaurav Aby zostać uznanym za przestarzałego, musiałby on być częścią standardu na samym początku, czego nigdy nie było. –
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.
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ć.
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>
.
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
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. –