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 ???