我需要使用一个std::字符串来存储由fgets()检索的数据。为此,我需要将fgets()的char*返回值转换为std::string存储在数组中。如何做到这一点呢?
当前回答
我想提到一个使用用户定义的字面量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;
其他回答
char* data;
std::string myString(data);
string有一个构造函数:
const char *s = "Hello, World!";
std::string str(s);
注意,这个构造深度复制s处的字符列表,s不应该是nullptr,否则行为未定义。
通过构造函数传入:
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*的大小,可以使用这个
char* data = ...;
int size = ...;
std::string myString(data, size);
这没有使用strlen。
编辑:如果字符串变量已经存在,使用assign():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
我需要使用std::string来存储由fgets()检索的数据。
为什么在编程c++时使用fgets() ?为什么不是std::getline()?
推荐文章
- 对静态类成员的未定义引用
- c++中“using”关键字背后的逻辑是什么?
- 转换Python程序到C/ c++代码?
- 使用goto有什么问题?
- 度量c++中函数的执行时间
- 我如何类型定义一个函数指针与c++ 11使用语法?
- cbegin/cend背后的原因是什么?
- 如何在Eclipse CDT中启用c++ 11/ c++ 0x支持?
- 将string (or char*)转换为wstring (or wchar_t*)
- 如何停止c++控制台应用程序从退出立即?
- 有没有替换Windows (Visual C)的unistd.h ?
- 目标文件中无法解析的外部符号
- Lambda捕获作为const引用?
- 如何从c风格数组初始化std::vector ?
- 是std::vector复制对象push_back?