У меня есть ошибка в моей программе: "невозможно преобразовать из строки в char *". Как выполнить это преобразование?
Как преобразовать строку в char * в С++?
Ответ 1
Если вы можете согласиться на const char*, вам просто нужно вызвать метод c_str() на нем:
const char *mycharp = mystring.c_str();
Если вам действительно нужна модифицируемая char*, вам нужно будет сделать копию строкового буфера. A vector - идеальный способ справиться с этим для вас:
std::vector<char> v(mystring.length() + 1);
std::strcpy(&v[0], mystring.c_str());
char* pc = &v[0]; Ответ 2
Вызвать str.c_str(), чтобы получить const char*:
const char *pch = str.c_str();
Обратите внимание, что результирующий const char* действителен только до тех пор, пока str не будет изменен или уничтожен.
Однако, если вам действительно нужен не const, вы, вероятно, не должны использовать std::string, поскольку он не был предназначен для изменения его базовых данных за его спиной. Тем не менее, вы можете получить указатель на свои данные, вызвав &str[0] или &*str.begin().
Уродство этого следует рассматривать как особенность. В С++ 98, std::string даже не требуется хранить свои данные в непрерывном куске памяти, так что это может взорваться в вашем лице. Я думаю, изменился, но я даже не могу вспомнить, было ли это для С++ 03 или следующей следующей версии стандарта, С++ 1x.
Если вам нужно это сделать, подумайте об использовании std::vector<char>. Вы можете получить доступ к своим данным таким же образом: &v[0] или &*v.begin().
Ответ 3
//assume you have an std::string, str.
char* cstr = new char[str.length() +1];
strcpy(cstr, str.c_str());
//eventually, remember to delete cstr
delete[] cstr;
Ответ 4
Используйте метод c_str() для объекта string, чтобы получить указатель const char*. Предупреждение: возвращенный указатель больше недействителен, если объект string изменен или уничтожен.
Ответ 5
Поскольку вы хотели перейти от string к char* (т.е. не к const char*), вы можете сделать это, НО БЫВАЙТЕ: здесь есть драконы:
string foo = "foo";
char* foo_c = &foo[0];
Если вы попытаетесь изменить содержимое строки, вы будете хорошо и по-настоящему сами по себе.
Ответ 6
Если const char* подходит для вас, то используйте это: myString.c_str()
Если вам действительно нужно char* и точно знать, что char* НЕ ИЗМЕНИТЬ, вы можете использовать это: const_cast<char*>(myString.c_str())
Если char* может измениться, вам нужно скопировать строку во что-то другое и использовать ее вместо этого. Что-то еще может быть std::vector, или new char[], это зависит от ваших потребностей.
Ответ 7
std::string::c_str() возвращает c-строку с тем же содержимым, что и объект string.
std::string str("Hello");
const char* cstr = str.c_str();