Как преобразовать массив char в строку?

Преобразование С++ string в массив char довольно прямолинейно с использованием функции c_str строки, а затем выполняется strcpy. Однако как сделать обратное?

У меня есть массив char вроде: char arr[ ] = "This is a test";, который нужно преобразовать обратно: string str = "This is a test.

+173
22 янв. '12 в 9:09
источник поделиться
5 ответов

Класс 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;
+261
22 янв. '12 в 9:11
источник

Другое решение может выглядеть так:

char arr[] = "mom";
std::cout << "hi " << std::string(arr);

который позволяет избежать использования дополнительной переменной.

+37
29 авг. '14 в 21:16
источник
#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
+6
26 сент. '16 в 14:09
источник

Есть небольшая проблема, пропущенная в голосующих ответах. А именно, массив символов может содержать 0. Если мы будем использовать конструктор с единственным параметром, как указано выше, мы потеряем некоторые данные. Возможное решение:

cout << string("123\0 123") << endl;
cout << string("123\0 123", 8) << endl;

Выход:

123
123 123

+6
16 июл. '17 в 14:02
источник

В С++ 11 вы можете использовать std::to_string("bla bla bla");

-8
17 июн. '16 в 9:04
источник

Посмотрите другие вопросы по меткам или Задайте вопрос