Wpis z mikrobloga

via Wykop Mobilny (Android)
  • 1
@VanQator: nie. String to vector charow. Czyli jest to rozbudowana klasa posiadająca własne metody. Jak chcesz rzutować chara na stringa to musi to być typ const char*
  • Odpowiedz
@VanQator: Tak, klasa przede wszystkim posiada destruktor, więc nie trzeba pamiętać o dealokacji pamięci. Ogólnie w C++ o wiele lepiej korzystać z kontenerów STL, zamiast tworzyć własne.
  • Odpowiedz
@Defined: Jeżeli chodzi o std::string to nie, nie jest to osobny byt, to dokładnie jest kontener STLa.

@VanQator: Generalnie std::string od char* różni się sposobem użycia. Zazwyczaj w char* przechowuje się ciągi znaków zakończone zerem, które nie potrzebują rozmiaru, natomiast std::string potrafi przechowywać zera.
  • Odpowiedz
@VanQator: Jeżeli string ma ponad 15(?) znaków to jest alokowany na stercie, wtedy możesz wykorzystać char* i napis zostanie odłożony na stosie, to chyba jedyna sytuacja w jakiej można zastąpić stringa.
  • Odpowiedz
@VanQator: Znak '\n' to koniec lini i jego wyświetlenie polega na przejściu do nowej linijki i wyświetlenie reszty od początku linii.

char* nie przechowuje znaków tylko wskaźnik na tablicę, wiec do samej tablicy możesz zapisać wszystko. Jednak nie masz żadnej informacji o ilości miejsca zaalokowanego które możesz wykorzystać. Dlatego większość funkcji przyjmująca samo char* przyjmuje że ciąg znaków kończy się znakiem '\0'.
  • Odpowiedz
@VanQator: 1. std::string to jest kontener STLowy a nie żadne osobny byt

2. Znak końca lini '\n' nie ma nic wspólnego z null terminator w C-style strings. Znak końca lini jest implenetowany róznie w zależności od OS. Dla linuxa będzie to CRLF a więc para 0xDA w ASCII, dla Windowsa samo LF. Null terminator to po prosty 0x0.

3. char* podczas wyświetlania nic nie terminuje bo to zwykły typ wskaźnikowy.
  • Odpowiedz