Quelle est la meilleure façon de convertir une chaîne de style C en C++ std::string
? Dans le passé, je l'ai fait en utilisant stringstream
s. Y a-t-il une meilleure façon?
Les chaînes C++ ont un constructeur qui vous permet de construire un std::string
directement à partir d'une chaîne de style C:
const char* myStr = "This is a C string!";
std::string myCppString = myStr;
Ou bien:
std::string myCppString = "This is a C string!";
Comme @TrevorHickey le note dans les commentaires, veillez à ce que le pointeur sur lequel vous initialisez le std::string
avec n'est pas un pointeur nul. Si c'est le cas, le code ci-dessus conduit à un comportement indéfini. Là encore, si vous avez un pointeur nul, on pourrait dire que vous n'avez même pas de chaîne du tout. :-)
Vérifiez les différents constructeurs de la classe de chaîne: documentation Vous pourriez être intéressé par:
//string(char* s)
std::string str(cstring);
Et:
//string(char* s, size_t n)
std::string str(cstring, len_str);
C++11
: surcharge un opérateur littéral de chaîne
std::string operator ""_s(const char * str, std::size_t len) {
return std::string(str, len);
}
auto s1 = "abc\0\0def"; // C style string
auto s2 = "abc\0\0def"_s; // C++ style std::string
C++14
: utilisez l'opérateur de std::string_literals
espace de noms
using namespace std::string_literals;
auto s3 = "abc\0\0def"s; // is a std::string
Si tu veux dire char*
à std::string
, vous pouvez utiliser le constructeur.
char* a;
std::string s(a);
Ou si le string s
existe déjà, écrivez simplement ceci:
s=std::string(a);
Vous pouvez initialiser un std::string
directement à partir d'une chaîne c:
std::string s = "i am a c string";
std::string t = std::string("i am one too");
En général (sans déclarer de nouveau stockage), vous pouvez simplement utiliser le constructeur 1-arg pour changer la chaîne c en une valeur de chaîne:
string xyz = std::string("this is a test") +
std::string(" for the next 60 seconds ") +
std::string("of the emergency broadcast system.");
Cependant, cela ne fonctionne pas lors de la construction de la chaîne pour la transmettre par référence à une fonction (un problème que je viens de rencontrer), par exemple.
void ProcessString(std::string& username);
ProcessString(std::string("this is a test")); // fails
Vous devez faire de la référence une référence const:
void ProcessString(const std::string& username);
ProcessString(std::string("this is a test")); // works.