std::string to char*

Eu quero converter um std::string em um char ou char[] tipo de dado.

std::string str = "string";
char* chr = str;

Resultados em: "erro: não pode converter 'std::string' para 'char'... ".

Que métodos estão disponíveis para fazer isto?

Solução

Ele ganhou't converte automaticamente (graças a Deus). Você'terá que utilizar o método c_str() para obter a versão de string C.

std::string str = "string";
const char *cstr = str.c_str();

Note que ele retorna um const char *; você está'não tem permissão para alterar a string no estilo C retornada por c_str(). Se você quiser processá-la você'terá que copiá-la primeiro:

std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;

Ou em C++ moderno:

std::vector cstr(str.c_str(), str.c_str() + str.size() + 1);
Comentários (18)
  • Se você só quer uma corda ao estilo C representando o mesmo conteúdo:

      char const* ca = str.c_str();
  • Se você quer uma string estilo C com novo conteúdo, uma maneira (dado que você não'não sabe o tamanho da string em tempo de compilação) é alocação dinâmica:

      char* ca = novo char[str.size()+1];
      std::copy(str.begin(), str.end(), ca);
      ca[str.size()] = '\0';

    Don'não se esqueça de delete[]lo mais tarde.

  • Se, em vez disso, quiser uma matriz de comprimento estatisticamente alocada e limitada:

      tamanho_t const MAX = 80; // número máximo de caracteres
      char ca[MAX] = {};
      std::copy(str.begin(), (str.size() >= MAX ? str.begin() + MAX : str.end()), ca);

std::string does't implicitamente converter para estes tipos pela simples razão de que a necessidade de fazer isto é normalmente um cheiro de design. Certifique-se de que você realmente precisa disso.

Se você **definidamente** precisar de um `char`, a melhor maneira é provavelmente:

vector v(str.begin(), str.end());
char* ca = &v[0]; // pointer to start of vector
Comentários (15)

Assumindo que você só precisa de um fio ao estilo C para passar como entrada:

std::string str = "string";
const char* chr = str.c_str();
Comentários (0)