A conversão de um C ++ string
em uma matriz de caracteres é bem direta, usando a c_str
função de string e depois o fazendo strcpy
. No entanto, como fazer o oposto?
I têm uma matriz de char como: char arr[ ] = "This is a test";
para ser convertido de volta para:
string str = "This is a test
.
const char*
, para que você possa transmitir uma string literal ou matriz de caracteres (que decai para isso)."hello world"
são matrizes. Se você usá-sizeof("hello world")
lo, fornecerá o tamanho da matriz (que é 12), em vez do tamanho de um ponteiro (provavelmente 4 ou 8).string
construtor não funcionará com, por exemplo, uma sequência de argumentos passada declarada comounsigned char * buffer
algo muito comum nas bibliotecas de manipulação de fluxo de bytes.std::string str(buffer, buffer+size);
mas provavelmente é melhor manter umstd::vector<unsigned char>
nesse caso.str
é uma função de conversão aqui. É o nome da variável de sequência. Você pode usar qualquer outro nome de variável (por exemplo ). A conversão é feita pelo construtor de std :: string chamado implicitamente.string foo(arr);
Outra solução pode ser assim,
o que evita o uso de uma variável extra.
fonte
cout << "test:" + std::string(arr);
string aString(someChar);
?Um pequeno problema foi esquecido nas respostas mais votadas. Ou seja, a matriz de caracteres pode conter 0. Se usarmos o construtor com um único parâmetro conforme indicado acima, perderemos alguns dados. A solução possível é:
A saída é:
fonte
std::string
como um contêiner para dados binários e não puder ter certeza de que a matriz não contém '\ 0'.FORA:
fonte