it-swarm.com.de

Wie konvertiere ich String in ein Char-Array in C++?

Ich möchte string in char array konvertieren, aber nicht char*. Ich weiß, wie man eine Zeichenfolge in char* konvertiert (mithilfe von malloc oder der Art, wie ich sie in meinem Code gepostet habe) - aber das ist nicht das, was ich will. Ich möchte einfach string in char[size] Array konvertieren. Ist es möglich?

#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;
}
83
Brian Brown

Die einfachste Möglichkeit, die mir dabei einfällt, ist:

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

Aus Sicherheitsgründen möchten Sie vielleicht:

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

oder könnte auf diese Weise sein:

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

Ok, ich bin schockiert, dass niemand wirklich eine gute Antwort gab, jetzt bin ich dran. Es gibt zwei Fälle.

  1. Ein Constant Char Array ist gut genug für Sie, damit Sie mit gehen, 

    const char *array = tmp.c_str();
    
  2. Oder Sie müssen modifizieren das Char-Array ist nicht konstant, dann gehen Sie einfach dazu 

    char *array = &tmp[0];
    

Beide sind nur Zuweisungsoperationen und meistens ist es genau das, was Sie brauchen. Wenn Sie wirklich eine neue Kopie benötigen, folgen Sie den Antworten anderer Kollegen.

48
rad

Am einfachsten wäre das so

std::string myWord = "myWord";
char myArray[myWord.size()+1];//as 1 char space for null is also required
strcpy(myArray, myWord.c_str());
15
user2963410
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)

Es ist besser, C in C++ zu vermeiden, daher sollte std :: string :: copy die Wahl statt strcpy sein.

9
Youka

Kopieren Sie einfach den String mit strcpy in das Array.

6
David Schwartz

Versuchen Sie es so, es sollte funktionieren. 

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

Versuchen Sie es mit strcpy (), aber wie Fred sagte, ist dies C++, nicht C

4
Marrow Gnawer

Sie könnten strcpy() wie folgt verwenden:

strcpy(tab2, tmp.c_str());

Achten Sie auf Pufferüberlauf.

2
Fred Larson

Wenn Sie die Größe der Zeichenfolge nicht vorher kennen und sie stark variieren kann, können Sie ein dynamisch zugewiesenes Array mit fester Größe mit der Arrayüberladung von unique_ptr erhalten:

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

Beachten Sie, dass Sie hier nicht strncpy benötigen, da das Array von vornherein ausreichend groß ist.

1
emlai

Wenn Sie C++ 11 oder höher verwenden, würde ich vorschlagen, std::snprintf anstelle von std::strcpy oder std::strncpy zu verwenden, da dies sicher ist (dh Sie bestimmen, wie viele Zeichen beschrieben werden können) Ihr Puffer) und weil es die Zeichenfolge für Sie auf Null setzt (damit Sie sich keine Sorgen machen müssen). Es wäre so:

#include <string>
#include <cstdio>

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

In C++ 17 haben Sie diese Alternative:

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

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

Nun, ich weiß das vielleicht etwas dumm als und einfach, aber ich denke, es sollte funktionieren:

string n;
cin>> n;
char b[200];
for (int i = 0; i < sizeof(n); i++)
{
    b[i] = n[i];
    cout<< b[i]<< " ";
}
0
SquircKle