2010-02-11 3 views

ответ

23

std::string может принимать char * в качестве параметра constructor и через ряд операторов.

char * mystr = "asdf"; 
std::string mycppstr(mystr); 

или языковых адвокатов

const char * mystr = "asdf"; 
std::string mycppstr(mystr); 
+6

Интересно, почему все, ответившие на это, используют ошибочный (но разрешенный стандартным) тип char * для строковых литералов. Все строковые литералы доступны только для чтения, и поэтому должен использоваться тип char const *. Аргумент std :: string также является char const *. – Tronic

+0

Так что, если у меня есть строка типа C в переменной char *, то как мне преобразовать ее в строку стиля C++, учитывая, что строго говоря, параметр для конструктора должен быть char const * type? – assassin

+0

@assassin: у вас нет char * вообще, но ваша строка типа C является char const *. Если это ваш код, вы можете его изменить, если он находится в библиотеке, вы не можете. –

8
char* cstr = //... some allocated C string 

std::string str(cstr); 

Содержимое cstr будет скопирован в str.

Это может быть использовано в операциях тоже как:

std::string concat = somestr + std::string(cstr); 

Где somestr уже `станд :: string``

2

Вы можете использовать stringclass constructor который принимает char* в качестве аргумента.

char *str = "some c style string"; 
string obj(str); 
+0

Большое спасибо ... – assassin

0

Другой способ сделать преобразование является вызов функции, которая принимает const std::string& в качестве параметра:

void foo(const std::string& str); 

void bar() 
{ 
    char* str= ... 

    foo(str); 
} 

Я думаю, что его намного более аккуратно, чтобы сделать преобразование на границе вызова функции.

+0

Вы говорите, что foo здесь должно быть пустой функцией и при вызове функции str преобразуется в const std :: string type? – assassin

+0

@assassin: Нет, извините. 'foo()' - любая функция, которая принимает 'const std :: string &'. Это может быть тот, который вы пишете. Мой ответ был всего лишь примером использования, где у вас есть c-строка и вы хотите ее преобразовать. Он также разделяет части кода, где с-строка генерируется, откуда данные используются в форме 'std :: string'. – quamrana

Смежные вопросы