Ich möchte string
in char
Array konvertieren , aber nicht char*
. Ich weiß, wie man einen String konvertiert char*
(indem malloc
ich ihn verwende oder wie ich ihn in meinem Code gepostet habe) - aber das ist nicht das, was ich will. Ich möchte einfach string
in ein 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;
}
c++
string
type-conversion
Brian Brown
quelle
quelle
Antworten:
Der einfachste Weg, den ich mir vorstellen kann, ist:
Aus Sicherheitsgründen bevorzugen Sie vielleicht:
oder könnte auf diese Weise sein:
quelle
strncpy
ist, dass es nicht nullterminiert wird, wenn es die Größe erreicht, bevor es eine Null in der Quellzeichenfolge findet. Muss auch damit vorsichtig sein!Ok, ich bin schockiert, dass niemand wirklich eine gute Antwort gegeben hat, jetzt bin ich dran. Es gibt zwei Fälle;
Ein konstantes char-Array ist gut genug für Sie, also gehen Sie mit,
Oder Sie müssen das char-Array so ändern, dass die Konstante nicht in Ordnung ist
Beide sind nur Zuweisungsoperationen und meistens ist dies genau das, was Sie brauchen. Wenn Sie wirklich eine neue Kopie benötigen, folgen Sie den Antworten anderer Kollegen.
quelle
std::size(elem)
in C ++ ist gut definiert, wann einelem
ist,char array
aber es kann nicht kompiliert werden, wannelem
einchar*
oder istconst char*
, Sie können es hier sehenDer einfachste Weg, dies zu tun, wäre dies
quelle
Es ist besser, C in C ++ zu vermeiden, daher sollte std :: string :: copy die Wahl anstelle von strcpy sein .
quelle
Kopieren Sie einfach den String in das Array mit
strcpy
.quelle
Versuchen Sie es so, es sollte funktionieren.
quelle
Versuchen Sie strcpy (), aber wie Fred sagte, ist dies C ++, nicht C.
quelle
Sie könnten
strcpy()
wie folgt verwenden:Achten Sie auf Pufferüberlauf.
quelle
Wenn Sie die Größe der Zeichenfolge vorher nicht kennen, können Sie ein Array dynamisch zuweisen:
quelle
Nun, ich weiß, dass dies vielleicht eher dumm
alsund einfach ist, aber ich denke, es sollte funktionieren:quelle
n
das nicht größer sein kann alsb
. Es würde abstürzen, wennn>b
. Verwenden Sie besser diestrcpy
bereits bereitgestellte Funktion. Bearbeiten: In einigen Fällen ist es möglicherweise sogar besser zu verwenden,strcpy_s
da es die Überprüfung auf NULL-Zeiger hinzufügt (wenn Ihre Plattform dies unterstützt)Wenn Sie C ++ 11 oder höher verwenden, würde ich empfehlen,
std::snprintf
überstd::strcpy
oderstd::strncpy
wegen seiner Sicherheit zu verwenden (dh Sie bestimmen, wie viele Zeichen in Ihren Puffer geschrieben werden können) und weil es die Zeichenfolge für Sie mit Null beendet (so) Sie müssen sich keine Sorgen machen). Es wäre so:In C ++ 17 haben Sie folgende Alternative:
quelle