Мне нужно использовать std::string
для хранения данных, полученных с помощью fgets()
. Для этого мне нужно преобразовать вывод fgets() char*
в std::string
для хранения в массиве. Как это можно сделать?
Конвертировать a 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';