String2CharArray für C++?
-
Ergänzungen:
GPC schrieb:
kopfgeldjaeger schrieb:
einen String in ein char-Array umzuwandeln...
Willst du den C-String nur ausgeben bzw. weiterreichen, oder auch wirklich verändern?
Falls ersteres:std::string str("Hallo"); const char *c = str.c_str();Beachte aber, dass du hier nicht an c rumfummeln darfst, da c wirklich auf den C-String zeigt, der zu str gehört und den du deshalb NICHT verändern solltest.
Und daß bei einem der nächsten Direktaufrufe von string-Methoden dein Zeiger ungültig werden kann.
Falls zweiters, gehst du hin und kopierst den String rein:
#include <string> #include <cstring> std::string str("Hallo"); size_t len = str.size(); char *c = new char[len+1]; //+1 für das '\0' strncpy(c, str.c_str(), len); //... Sachen mit c machen... delete [] c;Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
-
CStoll schrieb:
...Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
Oha, das wusste ich auch noch nicht ... peinlich.

Gruß,
Simon2.
-
std::string str("Hallo"); std::vector<char> chararray(str.begin(), str.end());
-
Simon2 schrieb:
CStoll schrieb:
...Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
Oha, das wusste ich auch noch nicht ... peinlich.

Ich auch nicht. Ist aber auch egal, da es die Lösung in dem Sinn nicht wirklich verbessert.
Aber danke für den Hinweis
-
GPC schrieb:
Simon2 schrieb:
CStoll schrieb:
...Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
Oha, das wusste ich auch noch nicht ... peinlich.

Ich auch nicht. Ist aber auch egal, da es die Lösung in dem Sinn nicht wirklich verbessert.
Aber danke für den Hinweis
Naja, ich finde es schon gut, wenn man nicht noch cstring einbinden muß (für strncpy())....
Aber mir ging es einfach prinzipiell darum, dass ich immer zu strncpy() gegeriffen habe in so einer Situation - und das eben nicht mehr brauche !

Gruß,
Simon2.
-
Simon2 schrieb:
GPC schrieb:
Simon2 schrieb:
CStoll schrieb:
...Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
Oha, das wusste ich auch noch nicht ... peinlich.

Ich auch nicht. Ist aber auch egal, da es die Lösung in dem Sinn nicht wirklich verbessert.
Aber danke für den Hinweis
Naja, ich finde es schon gut, wenn man nicht noch cstring einbinden muß (für strncpy())....
Hm, der Header ist nicht so riesieg und ich brauch ihn meistens eh, weil ich oft auch char * verwende.
Aber mir ging es einfach prinzipiell darum, dass ich immer zu strncpy() gegeriffen habe in so einer Situation - und das eben nicht mehr brauche !

Ich werd's nach wie vor tun

-
GPC schrieb:
Simon2 schrieb:
GPC schrieb:
Simon2 schrieb:
CStoll schrieb:
...Warum über strncpy()? std::string bietet sogar eine eigene Methode copy() dafür an.
Oha, das wusste ich auch noch nicht ... peinlich.

Ich auch nicht. Ist aber auch egal, da es die Lösung in dem Sinn nicht wirklich verbessert.
Aber danke für den Hinweis
Naja, ich finde es schon gut, wenn man nicht noch cstring einbinden muß (für strncpy())....
Hm, der Header ist nicht so riesieg und ich brauch ihn meistens eh, weil ich oft auch char * verwende.
Aber mir ging es einfach prinzipiell darum, dass ich immer zu strncpy() gegeriffen habe in so einer Situation - und das eben nicht mehr brauche !

Ich werd's nach wie vor tun

irgendwie erscheint mir strncpy als die mit Abstand schlechteste Variante sowohl hinsichtlich Performance als auch Stil und sie kommt auch nicht mit eingebetteten \0 zu recht - vielleicht ist das aber gewollt. Solange sich niemand anderes damit quälen muss, mag das ok sein.
-
Hi,
ich wollte auch strncpy() nicht verdammen .. aber es ist immer besser, noch eine Alternative zu kennen.
Gruß,
Simon2.
-
Nein, versuche es lieber mit CString<*CMap<-exp(PI)><Ö>>
-
Ich verwende für gewöhnlich memcpy, wenn ich cstrings kopiere.
-
Wollte auch grad sagen, ich verwenden meist memcpy() wenn ich die Grösse schon kenne, oder halt std::copy - je nachdem.
-
lolz_offline schrieb:
Ich verwende für gewöhnlich memcpy, wenn ich cstrings kopiere.
... sollte ich nicht wundern, wenn einige Implementationen sowieso strcpy() als memcpy(..., ..., strlen()) umgesetzt haben ...
Nachdem ich#define strncpy memcpygesehen habe, überrasct mich gar nichts mehr...
Gruß,
Simon2.