web-dev-qa-db-fra.com

Comment convertir un tableau de caractères en chaîne?

La conversion d'un C++ string en un tableau de caractères est plutôt simple en utilisant la fonction c_str de chaîne puis en faisant strcpy. Cependant, comment faire le contraire?

J'ai un tableau de caractères comme: char arr[ ] = "This is a test"; à reconvertir en: string str = "This is a test.

229
kingsmasher1

La classe string a un constructeur qui prend une chaîne C terminée par 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;
348
Mysticial

Une autre solution pourrait ressembler à ceci,

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

ce qui évite d'utiliser une variable supplémentaire.

54
stackPusher

Il y a un petit problème qui manque dans les réponses les plus votées. Notamment, le tableau de caractères peut contenir 0. Si nous utilisons un constructeur avec un seul paramètre comme indiqué ci-dessus, nous perdrons certaines données. La solution possible est:

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

La sortie est:

123
123 123

26
Yola
#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
10
Cristian