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


Anmelden zum Antworten