string Problem



  • Hi,

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        string test;
        test[0] = 'b';              
        test[1] = 'l';
        test[2] = 'a';
        test[3] = 'h';
        test[4] = '\0';
    
        cout << test;           //warum wird nichts angezeigt?
    
        char test2[5];
        test2[0] = 'b';
        test2[1] = 'l';
        test2[2] = 'a';
        test2[3] = 'h';
        test2[4] = '\0';
    
        cout << test2;
    
        return 0;
    }
    


  • Eigentlich wundert mich, dass es dir nicht abstürzt; du schreibst da in Speicher rum, der dir nicht gehört. So etwa könnte man das machen:

    test.resize(4);
        test[0] = 'b';              
        test[1] = 'l';
        test[2] = 'a';
        test[3] = 'h';
    

    ...oder halt stumpf

    test = "blah";
    

    C++-Strings sind halt keine C-Strings.



  • Weil dein Code kaputt ist.

    Der String ist leer. Mit "str[0] = 'C';" überschreibst du das erste Zeichen... es gibt jedoch kein erstes Zeichen zum überschreiben. An genau der Stelle hapert es.

    Lösung: Im Konstruktor eine Größe übergeben, oder mittels .reserve() den String groß genug machen.

    Übrigens: Die Funktion .at() macht dasselbe wie der operator[], nur dass sie prüft ob der Index gültig ist und ggf. eine Exception wirft.



  • .reserve reicht nicht, es reserviert nur Speicher. Die Größe des Strings bleibt unverändert, und es gibt nach wie vor kein erstes Zeichen zu überschreiben.

    Es muss schon .resize sein.



  • Stimmt, danke für die Korrektur. 🙂



  • vielen dank für eure Hilfe 🙂
    die '\0' kann ich also bei c++ strings einfach weglassen?



  • O.o schrieb:

    vielen dank für eure Hilfe 🙂
    die '\0' kann ich also bei c++ strings einfach weglassen?

    ja.


Anmelden zum Antworten