134 votes

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

Je voudrais convertir string a char mais pas char* . Je sais comment convertir une chaîne de caractères en char* (en utilisant malloc ou la façon dont je l'ai affiché dans mon code) - mais ce n'est pas ce que je veux. Je veux simplement convertir string a char[size] l'array. Est-ce possible ?

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;

int main()
{
    // char to string
    char tab[4];
    tab[0] = 'c';
    tab[1] = 'a';
    tab[2] = 't';
    tab[3] = '\0';
    string tmp(tab);
    cout << tmp << "\n";

    // string to char* - but thats not what I want

    char *c = const_cast<char*>(tmp.c_str());
    cout << c << "\n";

    //string to char
    char tab2[1024];
    // ?

    return 0;
}

164voto

Chowlett Points 19889

La manière la plus simple à laquelle je pense est de le faire :

string temp = "cat";
char tab2[1024];
strcpy(tab2, temp.c_str());

Par sécurité, vous pourriez préférer :

string temp = "cat";
char tab2[1024];
strncpy(tab2, temp.c_str(), sizeof(tab2));
tab2[sizeof(tab2) - 1] = 0;

ou pourrait l'être de cette manière :

string temp = "cat";
char * tab2 = new char [temp.length()+1];
strcpy (tab2, temp.c_str());

80voto

rad Points 1026

Ok, je suis choqué que personne n'ait vraiment donné une bonne réponse, maintenant c'est mon tour. Il y a deux cas ;

  1. A tableau de chars constants est assez bon pour vous, alors vous allez avec,

    const char *array = tmp.c_str();
  2. Ou vous besoin de modifier le tableau de chars si constant n'est pas ok, alors il suffit de faire ceci

    char *array = &tmp[0];

Les deux sont juste des opérations d'affectation et la plupart du temps, c'est juste ce dont vous avez besoin, si vous avez vraiment besoin d'une nouvelle copie, suivez les réponses des autres collègues.

20voto

Youka Points 2450
str.copy(cstr, str.length()+1); // since C++11
cstr[str.copy(cstr, str.length())] = '\0';  // before C++11
cstr[str.copy(cstr, sizeof(cstr)-1)] = '\0';  // before C++11 (safe)

Il est préférable d'éviter le C dans le C++, donc std::string::copy devrait être choisi au lieu de strcpy .

16voto

La façon la plus simple de le faire serait la suivante

std::string myWord = "myWord";
char myArray[myWord.size()+1];//as 1 char space for null is also required
strcpy(myArray, myWord.c_str());

6voto

David Schwartz Points 70129

Il suffit de copier la chaîne dans le tableau avec strcpy .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X