String nach char* ?
-
Hallo,
ich versuche eine Funktion namens "speichern(char*)" aufzurufen. Wie man sieht, braucht diese jedoch einen pointer auf char.
(Der Parameter dient der Funktion als Dateipfad.)
Ich habe jetzt eine Variable vom Typ string und möchte sie als Parameter übergeben.
Leider erhalte ich folgenden Fehler:error C2664: 'Lagerbestand::speichern': Konvertierung des Parameters 1 von 'std::string' in 'char *' nicht möglich
Wie genau muss ich die Variable denn nun übergeben, damit es geht?
Allein die Methode xy.c_str() auf den string auszuführen und das dann zu übergeben, funktioniert nicht. Dann meckert der Compiler, weil er keinen const char* übergeben will.Danke,
Rapthor
-
Hallo,
Habe zwar jetzt keinen Compiler zur Hand, aber hast du schon folgendes probiert? Würde mich schwer wundern, wenn's nicht gehen würde.// Pseudo-Aufruf der Funktion char* func(char*)... char* ptr = func((char*) dein_std_string.c_str()); ...
/edit: Oder 'more c++':
char* ptr = func(static_cast<char*>(dein_std_string.c_str()));
Caipi
-
Ich habe jetzt folgendes probiert:
string dateipfad = "c:\\test.txt"; xy.speichern((char*) dateipfad);
Der Compiler meint, dass std::string nicht nach char* konvertiert werden kann.
PS: Meine Funktion "speichern()" gibt übrigens void zurück und benötigt einen Paramter vom Typ char* !
-
Caipi schrieb:
char* ptr = func(static_cast<char*>(dein_std_string.c_str()));
Das würde ich aber nur in Betracht ziehen wenn du GANZ SICHER bist, das die
Funktion nicht schreibend auf den String zugreift. Ansonsten hilft nur
Umkopieren.
-
Redhead schrieb:
Caipi schrieb:
char* ptr = func(static_cast<char*>(dein_std_string.c_str()));
Das würde ich aber nur in Betracht ziehen wenn du GANZ SICHER bist, das die
Funktion nicht schreibend auf den String zugreift. Ansonsten hilft nur
Umkopieren.Das stimmt natürlich.
Ich habe halt gedacht, aufgrund dieses Zitates:(Der Parameter dient der Funktion als Dateipfad.)
dass der OP den Dateipfad (bzw. das Argument) nicht verändern will (KA warum [...] )
Ich habe jetzt folgendes probiert:
string dateipfad = "c:\\test.txt"; xy.speichern((char*) dateipfad);
Ich meinte das so:
string dateipfad = "c:\\test.txt"; xy.speichern((char*)dateipfad.c_str());
Der Compiler meint, dass std::string nicht nach char* konvertiert werden kann.
PS: Meine Funktion "speichern()" gibt übrigens void zurück und benötigt einen Paramter vom Typ char* !
Also greift die Funktion schreibend auf den char* zu? Dann vergiss, was ich gesagt habe und kopiere den String z.B. per strcpy().
Caipi
-
Ähm, eigentlich dürfte der static_cast da garnicht funktionieren. Der kann nämlich das const nicht wegcasten. Das kann nur der const-cast.
Also:
func(const_cast<char*>(derString.c_str());
-
string dateipfad = "c:\\test.txt";
xy.speichern((char*)dateipfad.c_str());Ja, so geht's jetzt
Ich danke euch,
die Funktion soll den string übrigens nicht bearbeiten.
-
Jester schrieb:
Ähm, eigentlich dürfte der static_cast da garnicht funktionieren. Der kann nämlich das const nicht wegcasten. Das kann nur der const-cast.
Also:
func(const_cast<char*>(derString.c_str());
Jetzt wo du es sagst. Komisch, hab's zwar nie ausprobiert (bin sehr neu im Umgang mit den C++-Casts), war aber der festen Überzeugung, dass es per static_cast gehen würde, da ich den const_cast-Operator bisher garnicht kannte
Warum eigentlich diese Trennung zwischen const Casts und nicht const Casts?
Caipi
-
Caipi schrieb:
Warum eigentlich diese Trennung zwischen const Casts und nicht const Casts?
ZB genau deswegen, dass du nicht einfach mit 'nem static_cast das const wegcasten kannst.