2011-01-21 76 views
23

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

+0

什么是cstring?你的意思是来自MFC的`CString`吗?或者一个以空字符结尾的char数组(一个C字符串)?或者是其他东西? – 2011-01-21 23:43:26

回答

41

C++字符串有一个构造函数,可以让你转换C风格的字符串:

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

现在我也必须`删除myStr;`不是? – 2015-11-06 14:23:03

+0

@BarnabasSzabolcs不​​,这不是必要的。你只需要删除新分配的内存。指向字符串的指针不需要解除分配。 – templatetypedef 2015-11-06 16:07:19

3

您可以从C-字符串直接初始化一个std::string

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

检查的不同构造字符串分类:documentation 您可能感兴趣的:

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

和:

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

如果你的意思char*std::string,您可以使用构造。

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

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

s=std::string(a); 
1

一般(没有宣布新的存储),你可以只使用1参数构造函数的C字符串变成一个字符串右值:

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. 
3

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 
相关问题