我需要使用一个std::string来存储检索到的数据fgets().要做到这一点,我需要将转换char*返回值从fgets()到std::string阵列中的存储.如何才能做到这一点?
Jes*_*der 339
std::string 有一个构造函数:
const char *s = "Hello, World!";
std::string str(s);
Run Code Online (Sandbox Code Playgroud)
只要确保你char *的不是NULL,否则行为是未定义的.
Eug*_*ene 115
如果您已经知道char*的大小,请改用它
char* data = ...;
int size = ...;
std::string myString(data, size);
Run Code Online (Sandbox Code Playgroud)
这不使用strlen.
编辑:如果字符串变量已存在,请使用assign():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Run Code Online (Sandbox Code Playgroud)
Atu*_*tul 23
大多数答案都谈到建设 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
Run Code Online (Sandbox Code Playgroud)
Jam*_*son 13
通过构造函数传入:
const char* dat = "my string!";
std::string my_string( dat );
Run Code Online (Sandbox Code Playgroud)
您可以使用函数string.c_str()以另一种方式:
std::string my_string("testing!");
const char* dat = my_string.c_str();
Run Code Online (Sandbox Code Playgroud)
小智 8
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
Run Code Online (Sandbox Code Playgroud)
从 C 样式字符串转换为 C++ std 字符串更容易
我们可以通过三种方式将 C 样式字符串转换为 C++ std 字符串
第一个是使用构造函数,
char chText[20] = "I am a Programmer";
// using constructor
string text(chText);
Run Code Online (Sandbox Code Playgroud)
第二个是使用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);
Run Code Online (Sandbox Code Playgroud)
第三个是赋值运算符(=),其中string类使用运算符重载
// 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;
Run Code Online (Sandbox Code Playgroud)
第三个也可以像下面这样写 -
// char string
char chText[20] = "I am a Programmer";
// c++ string
string text;
// convertion from char string to c++ string
text = chText;
Run Code Online (Sandbox Code Playgroud)
第三个有点简单,可以在两种情况下使用
我想提到一种使用用户定义文字的新方法s。这不是新的,但它会更常见,因为它被添加到 C++14 标准库中。
在一般情况下基本上是多余的:
string mystring = "your string here"s;
Run Code Online (Sandbox Code Playgroud)
但它允许您使用 auto,也可以使用宽字符串:
auto mystring = U"your UTF-32 string here"s;
Run Code Online (Sandbox Code Playgroud)
这就是它真正闪耀的地方:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
Run Code Online (Sandbox Code Playgroud)
我一直在努力使用 MSVC2005 来使用std::string(char*)构造函数,就像评价最高的答案一样。当我看到这个变体在始终受信任的http://en.cppreference.com/w/cpp/string/basic_string/basic_string上列为 #4 时,我想即使是旧的编译器也提供了这个。
我花了很长时间才意识到这个构造函数绝对拒绝与(unsigned char*)作为参数匹配!我收到了这些关于无法与参数类型匹配的难以理解的错误消息std::string,这绝对不是我的目标。只是用论点std::string((char*)ucharPtr)解决了我的问题......呃!
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
Run Code Online (Sandbox Code Playgroud)