convert a char* to std::string

Viewed 757037

I need to use an std::string to store data retrieved by fgets(). To do this I need to convert the char* return value from fgets() into an std::string to store in an array. How can this be done?

13 Answers

std::string has a constructor for this:

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

Note that this construct deep copies the character list at s and s should not be nullptr, or else behavior is undefined.

If you already know size of the char*, use this instead

char* data = ...;
int size = ...;
std::string myString(data, size);

This doesn't use strlen.

EDIT: If string variable already exists, use assign():

std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);

I need to use std::string to store data retrieved by fgets().

Why using fgets() when you are programming C++? Why not std::getline()?

Pass it in through the constructor:

const char* dat = "my string!";
std::string my_string( dat );

You can use the function string.c_str() to go the other way:

std::string my_string("testing!");
const char* dat = my_string.c_str();

Converting from C style string to C++ std string is easier

There is three ways we can convert from C style string to C++ std string

First one is using constructor,

char chText[20] = "I am a Programmer";
// using constructor
string text(chText);

Second one is using string::assign method

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

Third one is assignment operator(=), in which string class uses operator overloading

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

third one can be also write like below -

// char string
char chText[20] = "I am a Programmer";

// c++ string
string text;


// convertion from char string to c++ string
text = chText;

Third one is little straight forward and can be used in both situation

  1. while we are declaring and initializing
  2. while we are assigning multiple times after object creation or initialization
char* data;
std::string myString(data);
char* c1 = 'z';
char* c2 = 'w';
string s1{c1};
string s12{c1, c2};
Related