我需要使用一个std::字符串来存储由fgets()检索的数据。为此,我需要将fgets()的char*返回值转换为std::string存储在数组中。如何做到这一点呢?


当前回答

string有一个构造函数:

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

注意,这个构造深度复制s处的字符列表,s不应该是nullptr,否则行为未定义。

其他回答

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

为什么在编程c++时使用fgets() ?为什么不是std::getline()?

通过构造函数传入:

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();
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;

从C样式字符串转换为c++ std字符串更容易

有三种方法可以将C样式字符串转换为c++ std字符串

第一个是使用构造函数,

char chText[20] = "I am a Programmer";
// using constructor
string text(chText);

第二个是使用string::assign方法

// char string
char chText[20] = "I am a Programmer";

// c++ string
string text;

// convertion from char string to c++ string
// using assign function
text.assign(chText);

第三个是赋值操作符(=),其中字符串类使用操作符重载

// char string
char chText[20] = "I am a Programmer";

// c++ string
// convertion from char string to c++ string using assignment operator overloading
string text = chText;

第三个也可以写成如下-

// char string
char chText[20] = "I am a Programmer";

// c++ string
string text;


// convertion from char string to c++ string
text = chText;

第三个比较简单,可以在两种情况下使用

当我们声明和初始化时 当我们在对象创建或初始化后多次赋值时

如果您已经知道char*的大小,可以使用这个

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

这没有使用strlen。

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

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