Ik moet een std::string
gebruiken 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::string
om op te slaan in een array. Hoe kan dit worden gedaan?
Antwoord 1, autoriteit 100%
std::string
heeft hiervoor een constructor:
const char *s = "Hello, World!";
std::string str(s);
Merk op dat deze constructie diep de tekenlijst kopieert op s
en s
mag niet nullptr
zijn, 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 s
gebruikt. 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::string
argumenttype, 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';