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


当前回答

不知道为什么除了Erik之外没有人提到这一点,但根据这一页,赋值操作符工作得很好。不需要使用构造函数、.assign()或.append()。

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

其他回答

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

通过构造函数传入:

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();

string有一个构造函数:

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

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

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

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

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

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