将C样式字符串转换为C ++ std :: string

时间:2011-01-21 23:23:23

标签: c++ string cstring

将C风格字符串转换为C ++ std::string的最佳方法是什么?在过去,我使用stringstream s完成了它。还有更好的方法吗?

6 个答案:

答案 0 :(得分:51)

C ++字符串有一个构造函数,可以直接从C风格的字符串构造std::string

const char* myStr = "This is a C string!";
std::string myCppString = myStr;

或者,或者:

std::string myCppString = "This is a C string!";

正如@TrevorHickey在注释中所述,请注意确保初始化std::string的指针不是空指针。如果是,则上述代码会导致未定义的行为。再说一遍,如果你有一个空指针,可能会说你根本就没有字符串。 : - )

答案 1 :(得分:10)

检查字符串类的不同构造函数:documentation 您可能对以下内容感兴趣:

//string(char* s)
std::string str(cstring);

//string(char* s, size_t n)
std::string str(cstring, len_str);

答案 2 :(得分:5)

C++11 :重载字符串文字运算符

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 :使用std::string_literals命名空间中的运算符

using namespace std::string_literals;

auto s3 = "abc\0\0def"s;    // is a std::string

答案 3 :(得分:4)

您可以直接从c-string初始化std::string

std::string s = "i am a c string";
std::string t = std::string("i am one too");

答案 4 :(得分:4)

如果您的意思是char*std::string,则可以使用构造函数。

char* a;
std::string s(a);

或者如果string s已经存在,只需写下:

s=std::string(a);

答案 5 :(得分:1)

通常(不声明新存储)你可以使用1-arg构造函数将c-string更改为字符串rvalue:

string xyz = std::string("this is a test") + 
             std::string(" for the next 60 seconds ") + 
             std::string("of the emergency broadcast system.");

但是,当构造字符串以通过引用函数传递它时,这不起作用(我遇到的问题),例如。

void ProcessString(std::string& username);
ProcessString(std::string("this is a test"));   // fails

您需要将引用作为const引用:

void ProcessString(const std::string& username);
ProcessString(std::string("this is a test"));   // works.