std::string, warum funktioniert diese Zuweisung nicht?



  • Hallo!
    Ich wollte einfach mal wissen, warum folgender Code funktioniert

    #include <iostream>
    #include <string>
    
    int main()
    {
            std::string str1;
            std::string str2;
            std::cout << std::endl << "Bitte ein Wort eingeben: ";
            std::cin >> str1;
            for(int j = str1.length() - 1; j >= 0; --j)
                    str2 += str1[j];
    
            std::cout << "\nWort ist ";      
    
            if(str1 == str2)                
                    std::cout << "ein Palindrom\n\n";
            else
                    std::cout << "kein Palindrom\n\n";                
    
            return 0;
    }
    

    der folgende aber nicht:

    #include <iostream>
    #include <string>
    
    int main()
    {
    
            std::string str1;
            std::string str2;
            std::cout << std::endl << "Bitte ein Wort eingeben: ";
            std::cin >> str1;
            unsigned int j = str1.length() - 1;
            for(unsigned int i = 0; i < str1.length(); ++i, --j)
                    str2[i] = str1[j]; // Warum funktioniert diese Zuweisung nicht?
    
            std::cout << "\nWort ist ";
    
            if(str1 == str2)                
                    std::cout << "ein Palindrom\n\n";
            else
                    std::cout << "kein Palindrom\n\n";                
    
            return 0;
    }
    

    Das müsste doch das gleiche bewirken, oder??

    Vielen dank im voraus

    GAST



  • Weil str2 zu allen Zeiten die Laenge 0 hat, und sich bei str2[i] = ... nicht selbststaendig vergroessert, sondern wahrscheinlich undefiniertes Verhalten hat.



  • Gunnar har recht, gemäss Standard ergibt der Zugriff mittels []-Operator auf einen
    nicht existierenden Index undefiniertes Verhalten.

    mfg JJ



  • Danke euch beiden!
    Und wieder was dazugelernt 🙂

    _GAST_


Anmelden zum Antworten