converter um char * para std :: string
Pergunta
Eu preciso usar um std::string
para armazenar dados recuperados por fgets()
. Para fazer essa necessidade I para converter o valor char*
retorno de fgets()
em um std::string
para armazenar em uma matriz. Como isso pode ser feito?
Solução
std::string
tem um construtor para isso:
const char *s = "Hello, World!";
std::string str(s);
Apenas certifique-se de que o seu char *
não é NULL
, ou então o comportamento é indefinido.
Outras dicas
Se você já sabe o tamanho do char *, use esta em vez
char* data = ...;
int size = ...;
std::string myString(data, size);
Esta não usa strlen.
EDIT: Se cadeia variável já existe, o uso assign ():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Eu preciso usar std :: string para armazenar dados recuperados por fgets ().
Por que usar fgets()
quando você está programando C ++? Por que não std::getline()
?
A maioria das respostas fala sobre construção std::string
.
Se já construídos, apenas uso operador de atribuição .
std::string oString;
char* pStr;
... // Here allocate and get character string (e.g. using fgets as you mentioned)
oString = pStr; // This is it! It copies contents from pStr to oString
Passe-nos através do construtor:
const char* dat = "my string!";
std::string my_string( dat );
Você pode usar o string.c_str () para ir por outro caminho:
std::string my_string("testing!");
const char* dat = my_string.c_str();
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
Eu gostaria de mencionar um novo método que utiliza o usuário definido s
literal. Isto não é novo, mas vai ser mais comum porque foi adicionado no C ++ 14 biblioteca padrão.
Em grande parte supérflua no caso geral:
string mystring = "your string here"s;
Mas ele permite que você use auto, também com cordas de largura:
auto mystring = U"your UTF-32 string here"s;
E aqui é onde ele realmente brilha:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);
Não sei por que ninguém além de Erik mencionado isso, mas de acordo com esta página , o operador de atribuição funciona muito bem. Não há necessidade de usar um construtor, .assign (), ou .append ().
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
Eu apenas fui lutando com MSVC2005 usar o construtor std::string(char*)
assim como a resposta mais votadas. A meu ver esta variante listados como # 4 na sempre confiável http: // en. cppreference.com/w/cpp/string/basic_string/basic_string , eu acho que até mesmo um velho compilador oferece isso.
Ele me levou tanto tempo para perceber que esse construtor absoluta recusa a combinar com (unsigned char*)
como um argumento! Eu tenho essas mensagens de erro incompreensíveis sobre a falha para coincidir com std::string
tipo de argumento, que definitivamente não era o que eu estava buscando. Apenas lançar a discussão com std::string((char*)ucharPtr)
resolveu o meu problema ... duh!