Comment convertir une chaîne de caractères en tableau de caractères en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la méthode std::basic_string::c_str pour convertir une chaîne de caractères en tableau de caractères
  2. Utilisez le conteneur std::vector pour convertir une chaîne de caractères en tableau de caractères
  3. Utiliser les opérations de manipulation des pointeurs pour convertir une chaîne en tableau de caractères
Comment convertir une chaîne de caractères en tableau de caractères en C++

Cet article présente plusieurs méthodes pour convertir des données chaîne en tableau char.

Utilisez la méthode std::basic_string::c_str pour convertir une chaîne de caractères en tableau de caractères

Cette version est le moyen C++ de résoudre le problème ci-dessus. Elle utilise la méthode de construction de classe string c_str qui retourne un pointeur vers un tableau de caractères à terminaison nulle.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl using std::string;

int main() {
  string tmp_string = "This will be converted to char*";
  auto c_string = tmp_string.c_str();

  cout << c_string << endl;
  return EXIT_SUCCESS;
}

Production:

This will be converted to char*

Si vous avez l’intention de modifier les données stockées sur le pointeur renvoyé par la méthode c_str(), vous devez d’abord copier la plage à un emplacement différent avec la fonction memmove et ensuite opérer sur la chaîne de caractères comme suit:

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl using std::string;

int main() {
  string tmp_string = "This will be converted to char*";

  char *c_string_copy = new char[tmp_string.length() + 1];
  memmove(c_string_copy, tmp_string.c_str(), tmp_string.length());

  /* do operations on c_string_copy here */

  cout << c_string_copy;
  delete[] c_string_copy;
  return EXIT_SUCCESS;
}

Notez que vous pouvez copier les données de la c_string en utilisant diverses fonctions comme memcpy, memccpy, mempcpy, strcpy ou strncpy, mais n’oubliez pas de lire les pages du manuel et d’examiner attentivement les cas/bugs de bordure.

Utilisez le conteneur std::vector pour convertir une chaîne de caractères en tableau de caractères

Un autre moyen est de stocker les caractères d’une chaîne dans un conteneur vectoriel, puis d’utiliser ses puissantes méthodes intégrées pour manipuler les données en toute sécurité.

#include <iostream>
#include <iterator>
#include <string>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::vector;

int main() {
  string tmp_string = "This will be converted to char*\n";

  vector<char> vec_str(tmp_string.begin(), tmp_string.end());
  std::copy(vec_str.begin(), vec_str.end(),
            std::ostream_iterator<char>(cout, ""));

  return EXIT_SUCCESS;
}

Utiliser les opérations de manipulation des pointeurs pour convertir une chaîne en tableau de caractères

Dans cette version, nous définissons un pointeur char nommé tmp_ptr et nous lui attribuons l’adresse du premier caractère dans tmp_string.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl using std::string;

int main() {
  string tmp_string = "This will be converted to char*\n";
  string mod_string = "I've been overwritten";

  char *tmp_ptr = &tmp_string[0];
  cout << tmp_ptr;

  return EXIT_SUCCESS;
}

Rappelez-vous cependant que modifier les données à tmp_ptr modifierait également la valeur de tmp_string, ce que vous pouvez voir en exécutant l’exemple de code suivant:

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl using std::string;

int main() {
  string tmp_string = "This will be converted to char*\n";
  string mod_string = "I've been overwritten";

  char *tmp_ptr = &tmp_string[0];
  memmove(tmp_ptr, mod_string.c_str(), mod_string.length());

  cout << tmp_string;
  return EXIT_SUCCESS;
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ String

Article connexe - C++ Char