Подтвердить что ты не робот

Как преобразовать строку в char * в С++?

У меня есть ошибка в моей программе: "невозможно преобразовать из строки в char *". Как выполнить это преобразование?

4b9b3361

Ответ 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();