将char *转换为std :: string

时间:2009-07-28 17:55:34

标签: c++ stdstring

我需要使用std::string来存储fgets()检索到的数据。为此,我需要将char*返回值从fgets()转换为std::string以存储在数组中。怎么办呢?

11 个答案:

答案 0 :(得分:319)

std::string有一个构造函数:

const char *s = "Hello, World!";
std::string str(s);

请确保您的char *不是NULL,否则行为未定义。

答案 1 :(得分:112)

如果您已经知道char *的大小,请改用

char* data = ...;
int size = ...;
std::string myString(data, size);

这不使用strlen。

编辑:如果字符串变量已存在,请使用assign():

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);

答案 2 :(得分:28)

  

我需要使用std :: string来存储由fgets()检索的数据。

为什么在编写C ++时使用fgets()?为什么不std::getline()

答案 3 :(得分:20)

大多数答案都是关于构建 std::string

如果已构建,只需使用赋值运算符

std::string oString;
char* pStr;

... // Here allocate and get character string (e.g. using fgets as you mentioned)

oString = pStr; // This is it! It copies contents from pStr to oString

答案 4 :(得分:12)

通过构造函数传递它:

const char* dat = "my string!";
std::string my_string( dat );

你可以使用函数string.c_str()走另一条路:

std::string my_string("testing!");
const char* dat = my_string.c_str();

答案 5 :(得分:8)

const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;

答案 6 :(得分:5)

char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;

答案 7 :(得分:3)

我想提一个使用用户定义的文字s的新方法。这不是新的,但它会更常见,因为它已添加到C ++ 14标准库中。

在一般情况下非常多余:

string mystring = "your string here"s;

但是它允许你使用auto,也可以使用宽字符串:

auto mystring = U"your UTF-32 string here"s;

这就是它真正闪耀的地方:

string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;

答案 8 :(得分:0)

char* data;
std::string myString(data);

答案 9 :(得分:0)

不确定除了Erik之外没有人提到这一点,但根据this page,赋值运算符的工作正常。无需使用构造函数,.assign()或.append()。

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';

答案 10 :(得分:0)

我一直在努力与MSVC2005一起使用std::string(char*)构造函数,就像最受欢迎的答案一样。当我看到这个变体在永远受信任的http://en.cppreference.com/w/cpp/string/basic_string/basic_string上被列为#4时,我想即使是旧的编译器也提供了这个。

我花了很长时间才意识到这个构造函数绝对拒绝与(unsigned char*)作为参数匹配!我得到了关于无法与std::string参数类型匹配的这些难以理解的错误消息,这绝对不是我的目标。只是用std::string((char*)ucharPtr)转换参数解决了我的问题......呃!