将C风格的字符串转换为C++ std :: string
将C风格的字符串转换为C++的最佳方式std::string
?在过去,我使用stringstream
s完成了它。有没有更好的办法?将C风格的字符串转换为C++ std :: string
C++字符串有一个构造函数,可以让你转换C风格的字符串:
char* myStr = "This is a C string!";
std::string myCppString = myStr;
现在我也必须`删除myStr;`不是? – 2015-11-06 14:23:03
@BarnabasSzabolcs不,这不是必要的。你只需要删除新分配的内存。指向字符串的指针不需要解除分配。 – templatetypedef 2015-11-06 16:07:19
您可以从C-字符串直接初始化一个std::string
:
std::string s = "i am a c string";
std::string t = std::string("i am one too");
检查的不同构造字符串分类:documentation 您可能感兴趣的:
//string(char* s)
std::string str(cstring);
和:
//string(char* s, size_t n)
std::string str(cstring, len_str);
如果你的意思char*
到std::string
,您可以使用构造。
char* a;
std::string s(a);
或者如果string s
已经存在,只是写:
s=std::string(a);
一般(没有宣布新的存储),你可以只使用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.
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
什么是cstring?你的意思是来自MFC的`CString`吗?或者一个以空字符结尾的char数组(一个C字符串)?或者是其他东西? – 2011-01-21 23:43:26