将char*转换为std::string

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

775272 次浏览
char* data;
std::string myString(data);

std::string有一个这样的构造函数:

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

注意,这个结构deep复制了字符列表的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()?

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

我想提到一个新方法,它使用用户定义的字面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;

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

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;

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

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

大多数答案谈论构建 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

从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;

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

  1. 当我们声明和初始化时
  2. 当我们在对象创建或初始化后多次赋值时
char* c1 = 'z';
char* c2 = 'w';
string s1{c1};
string s12{c1, c2};