string zu char* konvertieren



  • Hallo,
    wie die Überschrift sagt, weiß ich nicht, wie ich aus einem string ein char-Array mache...
    mfG,
    Matthias



  • Wenn dir ein const char* reicht, kannst du dafür die Methode string::c_str() verwenden. Wenn es echt ein veränderbarer char* sein MUSS, könntest du mit &s[0] die Adresse des ersten Zeichens herausbekommen.



  • Einen veränderbaren char* auf einen std::string solltest Du nie verwenden und ist aus guten Grund nur schwierig zu bekommen. Man kann mit const_cast hantieren, aber das sollte man tunlichst vermeiden. std::string ist in der Regel referenzgezählt, d.h. der Speicherbereich, auf den der Pointer, den ich mit std::string::c_str() oder std::string::data() bekomme, zeigt auf einen Speicher, der möglicherweise von anderen Instanzen von std::string auch verwendet wird.

    Versuch doch mal:

    std::string s1 = "uhu";
    std::string s2 = s1;
    std::cout << s1.data() << ' ' << s2.data() << std::endl;
    

    Wahrscheinlich bekommst Du 2 mal den gleichen Wert. Wahrscheinlich daher, weil es nicht im Standard spezifiziert ist, sondern Implementierungsabhängig.

    Anders verhält es sich mit vector. Benötigt man einen char* (ohne const) kann man ein std::vector<char> verwenden und einen Zeiger auf das 1. Zeichen holen:

    std::vector<char> v(64);
    char* buffer = &v[0];  // das ist erlaubt
    

    Leider gibt es (noch) kein std::vector<T>::data(), daher die etwas unschöne Syntax.

    Tommi



  • string blub(...);
    char* array = new char[blub.size() + 1];
    copy(blub.begin(), blub.end(), array);
    

Anmelden zum Antworten