Как преобразовать массив символов в строку? - PullRequest
225 голосов
/ 22 января 2012

Преобразование C ++ string в массив символов довольно просто с использованием функции c_str строки и затем с помощью strcpy.Однако, как сделать обратное?

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

Ответы [ 4 ]

343 голосов
/ 22 января 2012

Класс string имеет конструктор, который принимает C-строку с нулевым символом в конце:

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;
53 голосов
/ 30 августа 2014

Другое решение может выглядеть следующим образом:

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

, в котором не используется дополнительная переменная.

25 голосов
/ 16 июля 2017

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

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

Вывод:

123
123 123

10 голосов
/ 26 сентября 2016
#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;

 free(tmp); 
 return 0;
}

OUT:

H : is a char array beginning with 17 chars long

Hello from Chile. :is a string with 17 chars long
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...