Converti String in Char Array in C++

Jinku Hu 12 ottobre 2023
  1. Usa il metodo std::basic_string::c_str per convertire una stringa in un array di caratteri
  2. Usa il contenitore std::vector per convertire una stringa in un array di caratteri
  3. Utilizzare le operazioni di manipolazione del puntatore per convertire una stringa in un array di caratteri
Converti String in Char Array in C++

Questo articolo introduce diversi metodi per convertire i dati string in array char.

Usa il metodo std::basic_string::c_str per convertire una stringa in un array di caratteri

Questa versione è il modo C++ per risolvere il problema precedente. Usa il metodo incorporato della classe string c_str che restituisce un puntatore a un array di caratteri con terminazione null.

#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;
}

Produzione:

This will be converted to char*

Se intendi modificare i dati memorizzati nel puntatore restituito dal metodo c_str(), prima devi copiare l’intervallo in una posizione diversa con la funzione memmove e poi operare sulla stringa di caratteri come segue:

#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;
}

Nota che puoi copiare i dati c_string utilizzando varie funzioni come: memcpy, memccpy, mempcpy, strcpy o strncpy, ma tieni presente di leggi le pagine di manuale e considera attentamente i loro casi limite / bug.

Usa il contenitore std::vector per convertire una stringa in un array di caratteri

Un altro modo è memorizzare i caratteri di string in un contenitore vector e quindi utilizzare i suoi potenti metodi incorporati per manipolare i dati in modo sicuro.

#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;
}

Utilizzare le operazioni di manipolazione del puntatore per convertire una stringa in un array di caratteri

In questa versione, definiamo un puntatore char chiamato tmp_ptr e gli assegniamo l’indirizzo del primo carattere in 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;
}

Ricorda però, la modifica dei dati in tmp_ptr altererebbe anche il valore tmp_string, che puoi vedere eseguendo il seguente codice di esempio:

#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;
}
Autore: 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

Articolo correlato - C++ String

Articolo correlato - C++ Char