Konwersja C ++ string
na tablicę char jest dość prosta przy użyciu c_str
funkcji string, a następnie wykonania strcpy
. Jak jednak zrobić odwrotnie?
Muszę tablica znak jak: char arr[ ] = "This is a test";
być przekonwertowany na adres:
string str = "This is a test
.
const char*
tablicę literałów łańcuchowych lub znaków char (która się do tego zmniejsza)."hello world"
są tablicami. Jeślisizeof("hello world")
go użyjesz , otrzymasz rozmiar tablicy (która wynosi 12), a nie rozmiar wskaźnika (prawdopodobnie 4 lub 8).string
Konstruktor nie będzie działać z, na przykład, przeszedł ciąg argumentu zadeklarowana jakounsigned char * buffer
, coś bardzo powszechne w strumień bajtów obsługi bibliotek.std::string str(buffer, buffer+size);
ale prawdopodobnie lepiej trzymać sięstd::vector<unsigned char>
w takim przypadku.str
to nie nawrócony funkcja tutaj. Jest to nazwa zmiennej łańcuchowej. Możesz użyć dowolnej innej nazwy zmiennej (npstring foo(arr);
.). Konwersja jest wykonywana przez konstruktor std :: string, który jest wywoływany niejawnie.Inne rozwiązanie może wyglądać tak:
co pozwala uniknąć użycia dodatkowej zmiennej.
źródło
cout << "test:" + std::string(arr);
string aString(someChar);
?W odpowiedziach, na które najczęściej głosowano, jest niewielki problem. Mianowicie tablica znaków może zawierać 0. Jeśli użyjemy konstruktora z jednym parametrem, jak wskazano powyżej, stracimy część danych. Możliwe rozwiązanie to:
Dane wyjściowe to:
źródło
std::string
jako kontenera danych binarnych i nie możesz być pewien, że tablica nie zawiera „\ 0”.NA ZEWNĄTRZ:
źródło