Конвертировать a char * в std::string

Мне нужно использовать std::string для хранения данных, полученных с помощью fgets(). Для этого мне нужно преобразовать вывод fgets() char* в std::string для хранения в массиве. Как это можно сделать?

Ответ 1

std::string имеет для этого конструктор:

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

Просто убедитесь, что ваш char * не NULL, иначе поведение undefined.

Ответ 2

Если вы уже знаете размер char *, используйте это вместо

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

Это не использует strlen.

EDIT: Если строковая переменная уже существует, используйте функцию assign():

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

Ответ 3

Мне нужно использовать std::string для хранения данных, полученных fgets().

Зачем использовать fgets() при программировании С++? Почему бы не std::getline()?

Ответ 4

В большинстве ответов говорится о построении 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

Ответ 5

Передайте его через конструктор:

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

Ответ 6

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

Ответ 7

char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;

Ответ 8

Я хотел бы упомянуть новый метод, который использует пользовательский литерал s. Это не ново, но это будет более распространено, потому что оно было добавлено в стандартную библиотеку С++ 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;

Ответ 9

Я только что боролся с MSVC2005, чтобы использовать конструктор std::string(char*) так же, как и самый рейтинговый ответ. Как я вижу, этот вариант указан как # 4 на всегда доверенный http://en.cppreference.com/w/cpp/string/basic_string/basic_string, я считаю, что даже старый компилятор предлагает это.

Мне так долго приходилось понимать, что этот конструктор абсолютно не согласен с (unsigned char*) как аргумент! Я получил эти непонятные сообщения об ошибках о несоответствии с типом аргументов std::string, который определенно не был тем, к чему я стремился. Просто выставляя аргумент с помощью std::string((char*)ucharPtr), я решил проблему... duh!

Ответ 10

char* data;
std::string myString(data);

Ответ 11

Не знаю, почему никто, кроме Эрика, не упомянул об этом, но согласно этой странице, оператор присваивания работает нормально. Нет необходимости использовать конструктор,.assign() или .append().

std::string mystring;
mystring = "This is a test!";   // Assign C string to std:string directly
std::cout << mystring << '\n';