Variable außerhalb einer Schleife nicht mehr sichtbar



  • #include <cstdlib>
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string crypt(string cont);
    
    int main(int argc, char *argv[])
    {
        string cont;
    
        cout<<"Hallo!"<<endl;
        ifstream in("quelle.txt");
        for(int i = 0; !in.eof(); ++i)
                cont[i]= in.get();
        cont = crypt(cont);
        ofstream out("ziel.txt");
        out<<cont;
        cout<<"Vorgang erfolgreich abgeschlossen"<<endl;
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    string crypt(string cont)
    {
           string pwd;
           cout<<"Bitte Passwort eingeben!"<<endl;
           cin>>pwd;
           int j = 0;
           for(int i = 0; i < cont.length(); ++i)
           {
                   cont[i] ^= pwd[j++];
                   if(j == cont.length())
                           j = 0;        
           }
           return cont; //^^
    }
    

    durch n bissle debug code (den ich inzwischen entfernt hab) hab ich herrausgefunden, das die variable (typ string) cont innerhalb der schleid´fe c´korrekt befüllt ist, nahc der schleife aber leer ist!
    Woran lkiegt das, ich hab die variable ja schließlich außerhalb der schleife deklariert



  • hmmm, ich finde das auch komisch .. Aber probier mal den string 'cont' arrayweise auszugeben, etwa so:

    Anscheinend funktioniert es mit dem get () nicht, ich weis auch nicht warum. Es gibt aber eine andere Methode, die auch funktioniert. Ersetze einfach die obere Schleife mit folgender:

    for(int i = 0; !in.eof(); i++) 
        {
            getline (in, cont);
        }
    

    Grüße,
    mikey.



  • Hi, das Problem liegt dadran, das dein string cont am Anfang die Länge NULL hat...
    Wenn du dann cont[i] = .. schreibst, schreibst du auf unintialisierten Speicher 😉

    Abhilfe:

    string cont = "";
    //...
    for(...) const += in.get();
    

    Zu dem ist deine Einlese Funktion nicht ganz korrekt, siehe hier und finde deinen Fehler 🙂 : http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ



  • danke, ghet nun

    nur kommt immer beim zurückrechnen ein leicht anderes ergebnis raus



  • alternativ geht auch

    cont.push_back(in.get());
    

    @Freak_Coder
    Deine Variante finde ich etwas kritisch. Woher weißt du, wie groß der interne Puffer im string nach string="" ist?



  • Braunstein schrieb:

    @Freak_Coder
    Deine Variante finde ich etwas kritisch. Woher weißt du, wie groß der interne Puffer im string nach string="" ist?

    Ich denke der Puffer ist bei string="" noch "NULL". Aber das ist ja doch egal wie groß der ist, sobald ich += wird er ja eh vergößert ...

    Was genau ist daran kritisch, sollte ich noch was beachten ???


Anmelden zum Antworten