Eu gostaria de converter string
para char
array, mas não char*
. Eu sei como converter string para char*
(usando malloc
ou da maneira que postei no meu código) - mas não é isso que eu quero. Eu simplesmente quero converter string
para char[size]
array. É possível?
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
int main()
{
// char to string
char tab[4];
tab[0] = 'c';
tab[1] = 'a';
tab[2] = 't';
tab[3] = '\0';
string tmp(tab);
cout << tmp << "\n";
// string to char* - but thats not what I want
char *c = const_cast<char*>(tmp.c_str());
cout << c << "\n";
//string to char
char tab2[1024];
// ?
return 0;
}
c++
string
type-conversion
Brian Brown
fonte
fonte
Respostas:
A maneira mais simples que consigo pensar em fazer é:
Por segurança, você pode preferir:
ou poderia ser desta forma:
fonte
strncpy
é que ele não terminará em null se atingir o tamanho antes de encontrar um null na string de origem. Tem que ter cuidado com isso também!Ok, estou chocado que ninguém realmente deu uma boa resposta, agora é a minha vez. Existem dois casos;
Uma matriz char constante é boa o suficiente para você, então você vai com,
Ou você precisa modificar o array char para que constante não esteja ok, então vá com isso
Ambos são apenas operações de atribuição e na maioria das vezes é exatamente o que você precisa. Se você realmente precisa de uma nova cópia, siga as respostas de outros companheiros.
fonte
std::size(elem)
em C ++ está bem definido quandoelem
é um,char array
mas não consegue compilar quandoelem
é umchar*
ouconst char*
, você pode vê-lo aquiA maneira mais fácil de fazer isso seria esta
fonte
É uma prática melhor evitar C em C ++, então std :: string :: copy deve ser a escolha em vez de strcpy .
fonte
Basta copiar a string para o array com
strcpy
.fonte
Tente desta forma que deve funcionar.
fonte
Tente strcpy (), mas como Fred disse, isso é C ++, não C
fonte
Você pode usar
strcpy()
, assim:Cuidado com o estouro do buffer.
fonte
Se você não souber o tamanho da string de antemão, poderá alocar dinamicamente uma matriz:
fonte
Bem, eu sei que isso pode ser mais idiota do
quesimples, mas acho que deve funcionar:fonte
n
não pode ser maior queb
. Ele iria quebrar sen>b
. Melhor usar astrcpy
função já fornecida. Editar: Em alguns casos, pode ser ainda melhor usarstrcpy_s
, pois adiciona a verificação de ponteiros NULL (se sua plataforma suportar)Se você estiver usando C ++ 11 ou superior, sugiro usar
std::snprintf
overstd::strcpy
oustd::strncpy
por causa de sua segurança (ou seja, você determina quantos caracteres podem ser gravados em seu buffer) e porque ele termina a string para você (então você não precisa se preocupar com isso). Seria assim:No C ++ 17, você tem esta alternativa:
fonte