konvertieren Sie vector<string> in char** C++
Ich habe eine vector<std::string>
variable. Ich übergeben zu müssen, es auf eine Methode, die akzeptiert char**
als input-parameter.
wie dies zu tun ? Wenn möglich und ich übergeben zu müssen, einen beschreibbaren.
Update 1:
Ein Werkzeug für die Erstellung einer service-Methode, gebe ich Parameter wie std::vector, aber es setzt automatisch die qualifier als &, was bedeutet, dass meine Methode definition die von dem tool generiert wird Aussehen wie:
std::string SvcImpl::myMethodname ( const std::string par1, const std::vector< std::string >& par2, const std::vector< std::string >& par3 )
{
}
Diese Methode wird automatisch aufgerufen, mit den Werten in der patameter übergeben.
Jetzt von innen diese Methode werde ich rufen Sie eine Methode in einer dll in einen lib-Ordner, die wie folgt aussieht:
int method_to_be_called(char* par1, char ** par2, char ** par3, void* pRetValue);
für par1 --> ich bin vorbei (char*)par1.c_str()
Muss ich wissen, wie die übergabe von Variablen für par2 und par3 und für pRetValue.
Werte für par2 und par3 sind erhältlich in den vector, aber der Letzte parameter pRetValue ist ein output-parameter, das muss ich zurückgeben, da std::string.
sorry, wenn ich sehr verwirrend oder zu Fragen, ganz einfache Fragen.
*writable
, vorausgesetzt, **beschreibbar ist, akzeptieren Sie Ihren char ** param.Ich denke, Sie gehen zu müssen, um eine neue zu produzieren
std::vector<char*>
zum speichern der Adressen aller Ihrer string-Daten.Was genau bedeutet dieser Methode übergeben Sie es zu tun?
Tun Sie wirklich brauchen, um zu kopieren Sie den Inhalt des strings in eine newed array, oder können Sie nur verwenden, einen Zeiger auf die zugrunde liegenden Daten direkt?
Die "zugrunde liegenden Daten" wäre ein array von string-Objekten, Sie können nicht einfach Durchlaufen, als wären Sie ein array von c-strings.
InformationsquelleAutor Mohamed Iqzas | 2014-09-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, das problem zu lösen, ohne Sie zu kopieren alle
std::strings
solange die Funktion nicht ändern die übergebenechar**
. Anders kann ich mir keine alternative ein, sondern kopieren sich alles in ein neues char**` Struktur (siehe zweites Beispiel).BEISPIEL 2: Wenn die Funktion ändern müssen, die übergebene Daten:
HINWEIS: Überarbeitet, um einen besseren code.
in dem Kommentar von deinem code, du hast geschrieben, dass "dies ist nicht eine Frage nach C++11." kannst du bitte erklären, warum?
Ich bearbeitete den Kommentar, wie es war nicht ganz korrekt. Aber bevor
C++11
es gibt keine Garantie, dass die Zeiger zurückgegebenc_str()
Punkte, um die Zeichenfolge tatsächlichen Daten (es kann eine temporäre Puffer). NachC++11
es wird garantiert, um auf die strings die tatsächlichen Daten. Es ist nur ungültig, wenn Sie vergrößern die Länge des Strings.Ewig gesucht, für eine gute Antwort-das ist das, was ich brauchte, die sonst niemand erwähnt: der c_str () - Funktion! Danke!!!
InformationsquelleAutor Galik
Galik Antwort hat eine Reihe von Fragen der Sicherheit. Hier ist, wie ich es tun würde, in Modernem C++:
Keine unordentlichen memory management oder böse
const_cast
s.Live auf Coliru.
Ausgänge:
InformationsquelleAutor caps