converteer een char* naar std::string

Ik moet een std::stringgebruiken om gegevens op te slaan die zijn opgehaald door fgets(). Om dit te doen, moet ik de char*-retourwaarde van fgets()converteren naar een std::stringom op te slaan in een array. Hoe kan dit worden gedaan?


Antwoord 1, autoriteit 100%

std::stringheeft hiervoor een constructor:

const char *s = "Hello, World!";
std::string str(s);

Merk op dat deze constructie diep de tekenlijst kopieert op sen smag niet nullptrzijn, anders is het gedrag niet gedefinieerd.

p>


Antwoord 2, autoriteit 34%

Als je de grootte van het teken* al weet, gebruik deze dan

char* data = ...;
int size = ...;
std::string myString(data, size);

Dit gebruikt geen strlen.

EDIT: Als de stringvariabele al bestaat, gebruik dan assign():

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);

Antwoord 3, autoriteit 10%

De meeste antwoorden gaan over construerenstd::string.

Als het al is gemaakt, gebruik dan de toewijzingsoperator.

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

4, Autoriteit 5%

Geef het door via de constructor:

const char* dat = "my string!";
std::string my_string( dat );

U kunt de functie String.c_str () gebruiken om de andere kant op te gaan:

std::string my_string("testing!");
const char* dat = my_string.c_str();

5, Autoriteit 3%

const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;

6, Autoriteit 2%

char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;

7

Ik zou graag een nieuwe methode willen noemen die de door de gebruiker gedefinieerde letterlijke sgebruikt. Dit is niet nieuw, maar het komt vaker voor omdat het in de C++ 14 standaardbibliotheek is toegevoegd.

Grotendeels overbodig in de Algemene geval:

string mystring = "your string here"s;

Maar hiermee kunt u Auto gebruiken, ook met brede snaren:

auto mystring = U"your UTF-32 string here"s;

En hier is waar het echt schijnt:

string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;

8

Ik heb net met MSVC2005 geworsteld om de std::string(char*)-constructor te gebruiken, net als het best beoordeelde antwoord. Aangezien ik deze variant zie als #4 op altijd vertrouwde http://en. cppreference.com/w/cpp/string/basic_string/basic_string, ik denk dat zelfs een oude compiler dit aanbiedt.

Het heeft zo lang geduurd voordat ik me realiseerde dat deze constructor absoluut weigert te matchen met (unsigned char*)als argument ! Ik kreeg deze onbegrijpelijke foutmeldingen over het niet overeenkomen met het std::stringargumenttype, wat absoluut niet was waar ik naar streefde. Gewoon het argument casten met std::string((char*)ucharPtr)loste mijn probleem op… duh!


Antwoord 9

char* data;
std::string myString(data);

Antwoord 10

Ik weet niet zeker waarom niemand behalve Erik dit heeft genoemd, maar volgens deze pagina, de toewijzingsoperator werkt prima. U hoeft geen constructor, .assign() of .append() te gebruiken.

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';

Other episodes