如何将 const char \* 转换为 std::string

新手上路,请多包涵

将 c 样式字符串转换为 std::string 的正确/最佳/最简单方法是什么。

转换应该接受一个 max_length,并在第一个 \0 字符处终止字符串,如果这发生在 max_length 宪章之前。

原文由 Allan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 599
2 个回答

string::string 上的此页面提供了两个可能的构造函数,它们可以满足您的需求:

 string ( const char * s, size_t n );
string ( const string& str, size_t pos, size_t n = npos );

例子:

 #include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;

int main(){

    char* p= (char*)calloc(30, sizeof(char));
    strcpy(p, "Hello world");

    string s(p, 15);
    cout << s.size() << ":[" << s << "]" << endl;
    string t(p, 0, 15);
    cout << t.size() << ":[" << t << "]" << endl;

    free(p);
    return 0;
}

输出:

 15:[Hello world]
11:[Hello world]

第一种形式认为 p 是一个简单的数组,因此将创建(在我们的例子中)一个长度为 15 的字符串,但是它打印为 cout << ... 的 11 个字符的空终止字符串 --- .可能不是你要找的。

第二种形式会将 char* 隐式转换为字符串,然后保持其长度与您指定的 n 之间的最大值。就你必须写的内容而言,我认为这是最简单的解决方案。

原文由 Vlad 发布,翻译遵循 CC BY-SA 3.0 许可协议

有一个构造函数接受两个指针参数,所以代码很简单

 std::string cppstr(cstr, cstr + min(max_length, strlen(cstr)));

如果长度小于 max_length ,这也将与 std::string cppstr(cstr) 一样有效。

原文由 6502 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题