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;
}
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());
Ok, ich bin schockiert, dass niemand wirklich eine gute Antwort gab, jetzt bin ich dran. Es gibt zwei Fälle.
Ein Constant Char Array ist gut genug für Sie, damit Sie mit gehen,
const char *array = tmp.c_str();
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.
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());
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.
Kopieren Sie einfach den String mit strcpy
in das Array.
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';
Versuchen Sie es mit strcpy (), aber wie Fred sagte, ist dies C++, nicht C
Sie könnten strcpy()
wie folgt verwenden:
strcpy(tab2, tmp.c_str());
Achten Sie auf Pufferüberlauf.
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.
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());
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]<< " ";
}