У меня есть ошибка в моей программе: "невозможно преобразовать из строки в 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();