我需要使用std::string
来存储由fgets()
检索的数据。为此,我需要将fgets()
的char *
返回值转换为std::string
,以存储在数组中。如何实现这一点?
std::string
有一个针对此目的的构造函数:
const char *s = "Hello, World!";
std::string str(s);
请注意,此构造会深度复制位于s
的字符串列表,并且s
不应为nullptr
,否则行为未定义。
如果您已经知道 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
。
如果已经构造好了,只需使用赋值运算符。
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
pStr
在分配给 oString
后是否可以被删除而不影响后者? - Sisir通过构造函数传递它:
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();
c_str()
返回 const char*
。 - Steve Jessopconst char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
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;
第三种方法比较简单,并且可以在两种情况下使用:
我想提到一种新方法,它使用了用户自定义字面量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;
using namespace std::literals;
才能使用这个。 - undefined我刚刚在使用MSVC2005时遇到了问题,想要像最受欢迎的答案一样使用std::string(char*)
构造函数。我看到这种变体在始终可信赖的http://en.cppreference.com/w/cpp/string/basic_string/basic_string上排名第四,所以即使是旧编译器也提供了这种构造函数。
我花了很长时间才意识到,这个构造函数绝对不会匹配(unsigned char*)
作为参数!我得到了这些难以理解的错误消息,说明无法与std::string
参数类型匹配,这绝对不是我想要的结果。只需使用std::string((char*)ucharPtr)
将参数强制转换即可解决我的问题...真是太傻了!