Übergabeprobleme



  • Hallo liebe Leute,
    Ich versuche ein Programm zu schreiben, dass einen vom Benutzer eingegebenen String durchsucht und einen Gewissen Buchstaben in einen anderen Umwandelt. Das Programm lässt sich ausführen, jedoch funktioniert es nicht richtig und mir gehen leider die Ideen aus. Nach dem einlesen des Strings stoppt es.

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    void replace_str(char *strp, const char c, const char r){
    
        for (int i = 0; i < strlen(strp); i++) {
            if (strp[i] == c) {
                strp[i] = r;
            }
        }
    
        cout << strp;
    
    }
    
    int main()
    {
    
        char str[1025];
        char* strp = str;
        char c;
        char r;
    
        cout << "Geben sie einen String und den Buchstaben den sie ersetzen wollen ein, gefolgt von dem einzusetzenden Buchstaben." << endl;
    
        cin.getline(str, strlen(str));
        cin >> c;
        cin >> r;
    
        replace_str(strp, c, r);
    
    }
    


  • EDIT: Hier stand Mist.



  • std::string!



  • Naja, dass Programm lässt sich Kompilieren und Ausführen, stoppt jedoch nach dem einlesen des Strings mit --> Program ended with exit code: 0. Ich kann also die beiden anderen Char Variablen gar nicht mehr Eingeben.



  • cin.getline(str, strlen(str));
    

    Wie viele Zeichen liest das?



  • OK Problem gefunden:

    Wenn man

    cin.getline(str, strlen(str));
    

    durch

    cin.getline(str, 1025);
    

    ersetzt, funktioniert das Programm, weiß jemand wieso?



  • alexxd_12 schrieb:

    OK Problem gefunden:

    Wenn man

    cin.getline(str, strlen(str));
    

    durch

    cin.getline(str, 1025);
    

    ersetzt, funktioniert das Programm, weiß jemand wieso?

    http://www.cplusplus.com/reference/cstring/strlen/



  • alexxd_12 schrieb:

    OK Problem gefunden:

    Wenn man

    cin.getline(str, strlen(str));
    

    durch

    cin.getline(str, 1025);
    

    ersetzt, funktioniert das Programm, weiß jemand wieso?

    Ja, str ist mit undefinierten Daten gefüllt (du hast es nicht initialisiert), daher ist auch strlen(str) undefiniert. Wenn du die Größe eines Arrays wissen willst, schreibst du sizeof(str)/sizeof(*str) .

    Aber: Nutze C++-Strings (std::string). Diese bieten auch eine eigene getline -Version. Das ist wesentlich sicherer und einfacher, als diese Array-Geschichten.


Log in to reply