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

blc*_*llo 33 c++ string cstring

将C风格的字符串转换为C++的最佳方法是什么std::string?过去我用stringstreams 做过.有没有更好的办法?

tem*_*def 51

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

const char* myStr = "This is a C string!";
std::string myCppString = myStr;
Run Code Online (Sandbox Code Playgroud)

  • 这里的每个答案都没有提到明显的边缘情况.如果您的char*为NULL,则抛出std :: string.它不会像许多人怀疑的那样是一个空字符串.很不幸的是,stackoverflow上的所有热门帖子都没有提到这一点,我怀疑很多谷歌这个简单转换的人正在处理这些错误. (8认同)
  • @TrevorHickey虽然这是真的,但可以说NULL不是一个字符串.这是没有字符串. (2认同)
  • @templatetypedef 同意。这里的答案并没有错,但是关于 NULL 的免责声明在帮助他人方面会大有帮助。有许多常见的函数(例如“getenv()”),当使用相同的输入调用时,它们可能会也可能不会返回 NULL。给新人一个简单的单行代码而不添加免责声明是让他们失败。 (2认同)

San*_*dri 10

检查字符串类的不同构造函数:文档 您可能感兴趣:

//string(char* s)
std::string str(cstring);
Run Code Online (Sandbox Code Playgroud)

和:

//string(char* s, size_t n)
std::string str(cstring, len_str);
Run Code Online (Sandbox Code Playgroud)


Man*_*nas 5

如果你想char*这样做std::string,你可以使用构造函数。

char* a;
std::string s(a);
Run Code Online (Sandbox Code Playgroud)

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

s=std::string(a);
Run Code Online (Sandbox Code Playgroud)


Shr*_*han 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
Run Code Online (Sandbox Code Playgroud)

C++14:使用std::string_literals命名空间中的运算符

using namespace std::string_literals;

auto s3 = "abc\0\0def"s;    // is a std::string
Run Code Online (Sandbox Code Playgroud)