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?

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top