2012-08-05 14 views
5

zacząłem uczyć ciągów i funkcji string (z książki), dowiedziałem funkcje jak strcpy i strcat i strncat ..etcC++: Funkcje łańcuchowe bez <cstring>

Więc zacząłem ćwiczyć wykorzystując je w prostych programów, aby uzyskać poczucie tego, co robią.

Potem byłem zaskoczony, że w książce mówi mi, że muszę użyć #include <cstring>, aby użyć wszystkich tych funkcji.

Próbowałem używać funkcji ciągów więcej niż jeden raz bez włączania <cstring>, więc dlaczego?

Jedyny plik nagłówkowy, który zawierałem, to <iostream>, a mimo to mogłem używać funkcji ciągów.

Proszę wyjaśnić mi, dlaczego funkcje ciągów działały bez <cstring> i czy muszę je dołączyć do funkcji ciągów, a jeśli nie, to jakie są zastosowania <cstring>;

+1

Jakiego kompilatora używasz? Poza tym lepiej przestudiować "std :: string" i klasy pokrewne. Manipulowanie 'char *' s nie jest czymś, co powinieneś robić bardzo często w C++. – Mat

+0

Im przy użyciu Microsoft Visual C++ 2010 Express –

Odpowiedz

4

Przede wszystkim należy koniecznie rozważyć przejście na std::string. Ręczna alokacja pamięci, będąc interesującym i niekiedy trudnym zadaniem, nie powinna być częścią codziennej pracy.

Po tym, prawdopodobnie <cstring> został # uwzględniony przez inny nagłówek, którego używasz w projekcie. Jednak lepiej nie polegać na innych nagłówkach, w tym na <cstring> (nikt nie gwarantuje, że będą robić to zawsze i na każdy kompilator) i uwzględnić go w razie potrzeby.

+0

Jestem jeszcze nowy w C++ i nie dowiedziałem się o std :: string jeszcze –

+0

Również mój program jest prosty program, który sprawia, że ​​2 ciągi i kopie jeden do drugiego następnie ouputs. Nic nadzwyczajnego –

+1

@Mohamed: std :: string jest właściwie właściwym sposobem manipulowania ciągami C++ – Vlad

2

Najprawdopodobniej wersja biblioteki standardowej C++ implementuje niektóre funkcje iostream za pomocą c standardowych funkcji bibliotecznych, które znajdują się w cstringu. Tak więc, po dołączeniu pliku nagłówkowego iostream, będzie to mieć dyrektywę #include, która daje cstring.

4

Nie musisz dodawać <cstring>, ponieważ jest on dołączony do iostream.

jednak pamiętać, że funkcja mówisz (strcpy, strcat, strncat) to funkcja biorąc char * C i C++ mają swoje odpowiedniki pracy z bardziej wygodne std::string.

strcpy: std::string::operator=

std::string str2; 
std::string str1 = str2; // copy str2 in str1 

strcat: std::string::operator+=

str1 += str2; // concat str2 to str1 

strncat:

str1 += str2.substr(0,n); // concat the first n characters of str2 to str1 
3

To po prostu oznacza, że ​​<cstring> została uwzględniona przez <iostream>. Po włączeniu <iostream> również domyślnie zawierasz <cstring> za jego pośrednictwem.

Należy pamiętać, że generalnie nie jest gwarantowane, że <cstring> jest dołączone przez <iostream>. Miałeś szczęście, że twoja konkretna implementacja miała takie włączenie. W innej implementacji, która może nie być taka.