Sicheres zuweisen von string vector an char**
-
Hallo,
wie kann ich einen vector (std::vectorstd::string) einer C-Funktion mit folgender Signatur zuweisen ohne zu kopieren:
void C_Funktion(const char * const *data, int len);
Danke
-
Garnicht. Wüsste nicht das std::string einen operator const char* überladen hat(dann wäre es einfach: static_cast<const char**>(&vec[0]) ... aber so geht es nicht.
-
mainzstu fiellaicht sowas hir:
#include <iostream> #include <string> using namespace std; void cf( const char* data ) { puts(data); } int main() { string str("pappnase"); cf(str.c_str()); return 0; }
-
Die String-Kopien kann man verhindern. Die String-Zeiger einmal in ein Array zu kopieren wird Dir nicht erspart bleiben.
std::vector<char const*> pointers(strings.size()); for (int i = 0; i < strings.size(); ++i) { pointers[i] = string[i].c_str(); }
-
hm das sollte funktionieren, allerdings musst du vorsichtig mit dem vector<string> sein, während die daten weitergereicht werden:
vector<string> original; vector<char const*> converted; char const* trans (std::string const& s) { return s.c_str(); } //... transform (original.begin(), original.end(), back_inserter(converted), trans); //oder transform (original.begin(), original.end(), back_inserter(converted), tr1::bind(&string::c_str, tr1::placeholders::_1)); C_Funktion(&converted[0]);
-
Vielen Dank für die Antworten