Может ли кто-нибудь рассказать мне, как преобразовать строку стиля C (i.e char *) в строку стиля C++ (т. Е. Std :: string) в программе на C++?преобразование строки стиля c в строку стиля C++
Большое спасибо.
Может ли кто-нибудь рассказать мне, как преобразовать строку стиля C (i.e char *) в строку стиля C++ (т. Е. Std :: string) в программе на C++?преобразование строки стиля c в строку стиля C++
Большое спасибо.
std::string
может принимать char *
в качестве параметра constructor и через ряд операторов.
char * mystr = "asdf";
std::string mycppstr(mystr);
или языковых адвокатов
const char * mystr = "asdf";
std::string mycppstr(mystr);
char* cstr = //... some allocated C string
std::string str(cstr);
Содержимое cstr
будет скопирован в str
.
Это может быть использовано в операциях тоже как:
std::string concat = somestr + std::string(cstr);
Где somestr
уже `станд :: string``
Вы можете использовать string
class constructor который принимает char*
в качестве аргумента.
char *str = "some c style string";
string obj(str);
Большое спасибо ... – assassin
Другой способ сделать преобразование является вызов функции, которая принимает const std::string&
в качестве параметра:
void foo(const std::string& str);
void bar()
{
char* str= ...
foo(str);
}
Я думаю, что его намного более аккуратно, чтобы сделать преобразование на границе вызова функции.
Вы говорите, что foo здесь должно быть пустой функцией и при вызове функции str преобразуется в const std :: string type? – assassin
@assassin: Нет, извините. 'foo()' - любая функция, которая принимает 'const std :: string &'. Это может быть тот, который вы пишете. Мой ответ был всего лишь примером использования, где у вас есть c-строка и вы хотите ее преобразовать. Он также разделяет части кода, где с-строка генерируется, откуда данные используются в форме 'std :: string'. – quamrana
Интересно, почему все, ответившие на это, используют ошибочный (но разрешенный стандартным) тип char * для строковых литералов. Все строковые литералы доступны только для чтения, и поэтому должен использоваться тип char const *. Аргумент std :: string также является char const *. – Tronic
Так что, если у меня есть строка типа C в переменной char *, то как мне преобразовать ее в строку стиля C++, учитывая, что строго говоря, параметр для конструктора должен быть char const * type? – assassin
@assassin: у вас нет char * вообще, но ваша строка типа C является char const *. Если это ваш код, вы можете его изменить, если он находится в библиотеке, вы не можете. –