std :: string to char * - PullRequest
       42

std :: string to char *

285 голосов
/ 08 сентября 2011

Я хочу преобразовать std :: string в char * или char [] тип данных.

std::string str = "string";
char* chr = str;

Результат: «ошибка: невозможно преобразовать ‘std :: string’ в ‘char’ ... ».

Какие есть способы сделать это?

Ответы [ 16 ]

3 голосов
/ 09 марта 2016

Вы можете сделать это с помощью итератора.

std::string str = "string";
std::string::iterator p=str.begin();
char* chr = &(*p);

Удачи.

3 голосов
/ 09 декабря 2015

Кроме того, вы можете использовать векторы, чтобы получить записываемый символ *, как показано ниже;

//this handles memory manipulations and is more convenient
string str;
vector <char> writable (str.begin (), str.end) ;
writable .push_back ('\0'); 
char* cstring = &writable[0] //or &*writable.begin () 

//Goodluck  
3 голосов
/ 17 июля 2014
char* result = strcpy((char*)malloc(str.length()+1), str.c_str());
2 голосов
/ 08 ноября 2018

Преобразование в стиле ООП

converter.hpp

class StringConverter {
    public: static char * strToChar(std::string str);
};

converter.cpp

char * StringConverter::strToChar(std::string str)
{
    return (char*)str.c_str();
}

использование

StringConverter::strToChar("converted string")
2 голосов
/ 25 июня 2016

Безопасная версия ответа char * orlp с использованием unique_ptr:

std::string str = "string";
auto cstr = std::make_unique<char[]>(str.length() + 1);
strcpy(cstr.get(), str.c_str());
2 голосов
/ 28 мая 2013

Это также будет работать

std::string s;
std::cout<<"Enter the String";
std::getline(std::cin, s);
char *a=new char[s.size()+1];
a[s.size()]=0;
memcpy(a,s.c_str(),s.size());
std::cout<<a;  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...