Ответ 1
Класс string
имеет конструктор, который принимает C-строку с завершающим NULL:
char arr[ ] = "This is a test";
string str(arr);
// You can also assign directly to a string.
str = "This is another string";
// or
str = arr;
Преобразование С++ string
в массив char довольно прямолинейно с использованием функции c_str
строки, а затем выполняется strcpy
. Однако как сделать обратное?
У меня есть массив char вроде: char arr[ ] = "This is a test";
, который нужно преобразовать обратно:
string str = "This is a test
.
Класс string
имеет конструктор, который принимает C-строку с завершающим NULL:
char arr[ ] = "This is a test";
string str(arr);
// You can also assign directly to a string.
str = "This is another string";
// or
str = arr;
Другое решение может выглядеть так:
char arr[] = "mom";
std::cout << "hi " << std::string(arr);
который позволяет избежать использования дополнительной переменной.
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
int main ()
{
char *tmp = (char *)malloc(128);
int n=sprintf(tmp, "Hello from Chile.");
string tmp_str = tmp;
cout << *tmp << " : is a char array beginning with " <<n <<" chars long\n" << endl;
cout << tmp_str << " : is a string with " <<n <<" chars long\n" << endl;
return 0;
}
OUT:
H : is a char array beginning with 17 chars long
Hello from Chile. :is a string with 17 chars long
Есть небольшая проблема, пропущенная в голосующих ответах. А именно, массив символов может содержать 0. Если мы будем использовать конструктор с единственным параметром, как указано выше, мы потеряем некоторые данные. Возможное решение:
cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;
Выход:
123
123 123
В С++ 11 вы можете использовать std::to_string("bla bla bla");