J'ai un const char *
revenu d'une fonction de traitement, et je voudrais le convertir/l'assigner à une instance de std::string
pour une manipulation ultérieure. Cela semble être simple, mais je n'ai pas pu trouver de documentation montrant comment cela devrait être fait. De toute évidence, il me manque quelque chose. Appréciation appréciée.
std::string
a un constructeur deconst char *
. Cela signifie qu'il est légal d'écrire:
const char* str="hello";
std::string s = str;
Essayer
const char * s = "hello";
std::string str(s);
fera l'affaire.
std::string
a un constructeur qui convertit const char*
implicitement. Dans la plupart des cas, vous ne devez rien faire. Passez juste un const char*
où un std::string
est accepté et cela fonctionnera.
Il y a trois possibilités. Vous pouvez utiliser un constructeur, un opérateur d'affectation ou une fonction membre assign
(si vous ne tenez pas compte de la fonction membre insert
bien qu'elle soit également utilisable :)) `
Par exemple
#include <iostream>
#include <string>
const char * f() { return "Hello Fletch"; }
int main()
{
std::string s1 = f();
std::string s2;
s2 = f();
std::string s3;
s3.assign( f() );
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
}
Vous avez beaucoup d'options:
const char* dosth() { return "hey"; }
string s1 = dosth();
string s2 (dosth());
string s3 {dosth()};
auto s4 = (string)dosth();
Démo en direct , Documentation
Notez que s3
et s4
sont des fonctionnalités C++ 11, si vous devez toujours travailler avec un compilateur ancien ou non conforme, vous devrez travailler avec l'une des autres options.