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

5voto

Essayez de cette façon, ça devrait marcher.

string line="hello world";
char * data = new char[line.size() + 1];
copy(line.begin(), line.end(), data);
data[line.size()] = '\0';

4voto

Waterfrag Points 497

Essayez strcpy(), mais comme Fred l'a dit, c'est du C++, pas du C.

3voto

Fred Larson Points 27404

Vous pourriez utiliser strcpy() comme ça :

strcpy(tab2, tmp.c_str());

Attention au dépassement de la mémoire tampon.

3voto

zenith Points 18532

Si vous ne connaissez pas la taille de la chaîne à l'avance, vous pouvez allouer dynamiquement un tableau :

auto tab2 = std::make_unique<char[]>(temp.size() + 1);
std::strcpy(tab2.get(), temp.c_str());

1voto

luizfls Points 376

Si vous utilisez C++11 ou plus, je vous suggère d'utiliser std::snprintf en std::strcpy o std::strncpy en raison de sa sécurité (c'est-à-dire que vous déterminez le nombre de caractères qui peuvent être écrits dans votre tampon) et parce qu'il termine la chaîne de caractères de manière nulle pour vous (vous n'avez donc pas à vous en soucier). Ce serait comme ceci :

#include <string>
#include <cstdio>

std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, sizeof(tab2), "%s", tmp.c_str());

En C++17, vous avez cette alternative :

#include <string>
#include <cstdio>
#include <iterator>

std::string tmp = "cat";
char tab2[1024];
std::snprintf(tab2, std::size(tab2), "%s", tmp.c_str());

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