String mit dynamischer Länge



  • Das liegt daran, daß du definitiv nicht genug Speicher bereitgestellt hast (und der bereitgestellte Speicher nebenbei schreibgeschützt ist). Die bessere Lösung ist auf jeden Fall, std::string zu verwenden (der wächst mit).

    Wenn das wirklich nicht geht (und imho brauchst du gute Gründe, warum std::string nicht verwendbar sein sollte), solltest du das char* s=""; ersetzen durch char* s=new char[gewuenschteLaenge+1];

    (PS: und strcat() ist für diese Aufgabe etwas übertrieben ;))



  • Das liegt daran, dass du keinen Speicher anforderst.

    char *s = new char[gewuenschteLaenge + 1];
    
    for(int j = 0; j < gewuenschteLaenge; j++)
    {
        s[j] = 's';
    }
    s[j] = '\0';
    

    Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen. Daher musst etwas in der Richtung machen:

    std::vector<char> temp_s;
    temp_s.push_back('s');
    std::string s(temp_s.begin(), temp_s.end());
    

    Oder du lässt es gleich im vector.

    Edit: Mal wieder Null am Ende vergessen :o



  • viande schrieb:

    Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen.

    Wer sagt das? std::string hat die Methoden push_back() zum Anhängen einzelner Zeichen und append() zum Anhängen von Zeichenfolgen (letzteres sogar in einer Version, die n Wiederholungen des selben Zeichens anhängen kann).



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-179812-and-start-is-10.html
    Aber wenn du das so sagst, guck ich doch lieber nochmal nach :o
    Edit: Merkwürdig. Es gibt push_back und append... Vergiss, was ich gesagt habe und nimm den Vorschlag von CStoll.

    Edit, ach es gab keinen Vorschlag von ihm 😉

    std::string s(gewuenschteAnzahl, 's');
    

    Das dürfte wohl die kürzeste Lösung sein.



  • viande schrieb:

    Die bessere Lösung wäre ein std::string. Wie in einem anderen Thread hier gerade diskutiert wurde, hat string aber keine portable Möglichkeit, um etwas anzuhängen.

    hast du da noch den link? denn das kann ich nicht so ganz glauben... bei traten diesbezüglich noch gar keine probleme auf...

    edit: da war wohl einer schneller



  • @Viande:

    und was ist mit insert?



  • Paddy82 schrieb:

    und was ist mit insert?

    Ja, das kann man auch nehmen 😉

    PS: in diesem Fall kannst du sogar mit assign() oder dem richtigen Ctor arbeiten, nur um die Liste zu vervollständigen:

    string s(gewuenschteLaenge,'s');
    

    (fällt dir noch eine kürzere Lösung ein?)

    Edit @viande: Von welcher Version des ANSI Standards reden wir hier? Ich hab' zwar kein offizielles Dokument hier, aber sowohl string::append() als auch string::push_back() gehören afaik zum Standard-Umfang von string.



  • CStoll schrieb:

    string s(gewuenschteLaenge,'s');
    

    (fällt dir noch eine kürzere Lösung ein?)

    Nein...

    Das mit push_back ist ja echt der Hammer...

    Ich habe gerade mal im Standard nachgeschlagen, die push_back Methode ist nicht im string spezifiziert 😮

    man lernt scheinbar nie aus...



  • Sagt mal, haben alle einen anderen Standard als ich? :o

    Bei mir steht ganz klar:

    21.3.5 basic_string modifiers
    basic_string& append(size_type n, charT c);
    void push_back(charT);

    Und das append für strings, Iteratoren etc.

    Edit: @CStoll:
    Wie gesagt, ich hab das ja auch gefunden, nur andere scheinbar nicht. Haben tu ich ISOIEC14882-1998 😉



  • @viande:

    Heute ist irgendwie nicht mein Tag...
    Ich habe es überlesen...

    PS: Ich habe den Standard von 2003 (ISO-IEC- 14882)


Anmelden zum Antworten