Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Probleme mit auslesen und verschlüsseln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.04.2004, 18:48 Uhr
~MadBull34
Gast


Moin!
Da bin ich mal wieder mit dem nächsten Problem.
Ich würde gerne Zeilen aus einer Datei auslesen, diese entschlüsseln und in eine andere Datei speichern. Eine Zeichenfolge zu entschlüsseln scheint nur mit *char zu gehen, da jedes Zeichen einzeln behandelt wird (mit dem i-Zähler). Auslesen kann ich aber anscheinend nur mit string-Variablen. D.h. ich muss aus einer Datei mehrere Strings auslesen und an eine *char-Variable übergenen. Beim Kompilieren werden immer 0Fehler und 0Warnungen angezeigt. Aber nach der Zeile "zeile == id + " " + idpwd + " " + rank;" fliegt mir das Prog um die Ohren. Hat jemand na Ahnung wieso? Irgend eine Idee, wie ich das besser machen könnte?


C++:
void encrypt(char *passwort)
{
    int passlen = strlen(passwort);
    if( passlen <= 0 ) return;
    int stringlen;
    int curpasscharpos;
    string id,idpwd,rank;
    char *zeile;
    string crdateiname = "user.dll";
    string encdateiname = "user_enc.dll";
    ifstream dat_ein;
    ofstream dat_aus;
    dat_ein.open(crdateiname.c_str(),ios_base::in);
    dat_aus.open(encdateiname.c_str());
    while (!dat_ein.eof())
    {
        curpasscharpos = 0;
        dat_ein >> id >> idpwd >> rank;
        zeile ='\0';
        zeile == id + " " + idpwd + " " + rank; //<-Ab hier knallt's! Ist wohl falsch zugeordnet
        stringlen= strlen(zeile);
        if( stringlen <= 0 ) return;
        for( int i = 0; i < stringlen; i++)
        {
            zeile[i] = zeile[i] - passwort[curpasscharpos];
            if( ++curpasscharpos >= passlen )
            curpasscharpos = 0;
        }
        dat_aus << zeile << endl;
    }
    dat_ein.close();
    dat_aus.close();
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.04.2004, 18:56 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
zeile ='\0';
zeile == id + " " + idpwd + " " + rank; //<-Ab hier knallt's! Ist wohl falsch zugeordnet



ist auch nicht weiter verwunderlich


C++:
zeile ='\0'; //was soll das bringen den charpointer auf null zeigen zu lassen oder so ähnlich...

//hier versuchst du eine adresse mit einen std::string zu vergleichen... das kann ja gar nich gehen...
zeile == id + " " + idpwd + " " + rank; //<-Ab hier knallt's! Ist wohl falsch zugeordnet




du hast zwei möglichkeiten.. entweder nimmst du ein char-array und ballerst da deinen std::string rein oder du verwendest gleich nur std::strings...

wenn du es c-like machen willst was ich dir eher nicht empfehlen würde wenn du eh schon c++ verwendest kannst du char-arrays z.b. mit strcmp vergleichen...

wenn du std::string's verwendest hast du den vorteil das der =operater und == schon sov erwendet wird wie du es intuitiv vermutest...

wenn du aber nur zwei charpointer vergleichst, vergelichst du eben nur zwei adressen aber eben nicht den inhalt auf den die beiden pointer zeigen...

wenn du aus nem std::string ein char-array haben willst kannst du es mittels der membermethode c_str() bekommen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 04.04.2004 um 19:05 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.04.2004, 19:04 Uhr
Oliver
S2-Pixelgeneral


Keine Warnungen und Fehler?
Das wird ich aber anders sehen.

Also ersteinmal kann man aus der string - Klasse genauso auslesen:


C++:
string str="hallo";
char erstesZeichen;
erstesZeichen=str[0];



Deswegen musst du es nicht erst umwandeln, denn das musst du erst dynamisch Speicher allokieren mit new und delete löschen, aber das muss ja nicht sein
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.04.2004, 19:05 Uhr
Oliver
S2-Pixelgeneral


Zu spät...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.04.2004, 19:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ach so noch ne anmerkung zum durchlaufen von strings...
das mit strlen zu machen ist total überflüssig und unperformant...
eine schleife in der man jedes einzelne zeichen eines char-arrays der reihe nach durchsuchen will sollte so ausehen

C++:
for(char*p=mycharpointer;*p;++p){...} //hier ist auch der fall strlen==0 mit drin weil der die schleife erst gar nicht durchläuft... wichtig ist halt nur das man immer einen nullterminierten string hat (aber den braucht man bei strlen ja auch weil der mach auch ncihts anderes als jedes zeichen einzeln druchzulaufen und zu schauen wann endlich das nullbyte kommt


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 04.04.2004 um 19:13 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.04.2004, 21:20 Uhr
~MadBull34
Gast



Zitat:
Windalf postete
...wenn du aus nem std::string ein char-array haben willst kannst du es mittels der membermethode c_str() bekommen...

@ Windalf
Meinst Du etwa so?


C++:
char *zeile;
string id, idpwd, rank;
...
zeile = id.c_str();


Dann kommt: error C2440: '=' : 'const char *' kann nicht in 'char *' konvertiert werden.
Und wenn ich das dann komplett schreiben will:

C++:
zeile = id.c_str() + " " + idpwd.c_str() + " " + rank.c_str();


dann erscheint nach dem Kompilieren: error C2110: Zwei Zeiger koennen nicht addiert werden.
Irgendwie verstehe ich nur Bahnhof. Sorry, Ihr lacht euch bestimmt kaputt. Ich progge leider erst seit Kurzem.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.04.2004, 21:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du willst doch das in zeile der ganze spass von vorhin steht...

dann definiere zeile doch einfach als string


C++:
string zeile=id + " " + idpwd + " " + rank;



so jetzt hast du den ganzen spass in zeile drin stehen...

wenn du nun mit zeile wie mit nem char_array arbeiten willst kannst du einfach zeile.c_str() verwenden...

an sonsten darfst du in dem was c_str() dir zurückliefert nicht rumpfuschen (ist halt const)

wenn du ein char-array haben willst in dem du "rumpfuschen" kannst dann z.b. so


C++:
char tralala[1024]; //sollte ja hoffentlich gross genug sein
.
.
.
string zeile=id + " " + idpwd + " " + rank;
//so und jetzt ballern wier mal das ganze aus zeile in das char-array tralala
sprintf(tralala,"%s",zeile.c_str());




so aber mal was anderes
ich weiss noch gar nicht was genau du machen willst...
eventuell kann dir hier jemand aus dem forum eine elgeante lösung anbieten wenn du mal konkret sagst was das teil machen soll

also du liest irgendwie id idpwd und rank aus ner datei ein...

und was genau willst du dann mit jedem zeichen dieses strings machen?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.04.2004, 21:59 Uhr
~MadBull34
Gast


Danke! Werde ich gleich mal ausprobieren.
Das Teil soll später mal ne Art Konsole geben, mit Admin und User-Berreich. Ich bastel das mit nem Kollegen zusammen. Momentan hat das noch gar keine Funktion. Man kann sich nur ein oder ausloggen (und als Admin vielleicht User verwalten). Was wir in der Schule lernen, wollten wir nach und nach nützlich in dem Teil einbinden. Das Modul, was ich hier behandle, soll Usernamen (id), Passwort (idpwd) und Rang (rank für Admin oder User) aus einer verschlüsselten Datei auslesen, entschlüsseln, mit dem Login vergleichen (steht in einer anderen Funktion) und dann entweder Zugang gewähren oder verweigern. Das Schreiben der entschlüsselten strings in eine temporäre Datei erscheint mir momentan die einzige Möglichkeit (also auslesen, entschlüsseln, in eine andere Datei schreiben und von dort aus nochmal sauber auslesen), da Leerzeichen (die ja normalerweise als Trennzeichen beim einlesen dienen) durch die Verschlüsselung nicht mehr als solche erkennbar sind. Die Zeile "administrator depp 0" würde z.B. verschlüsselt so aussehen "§ÙÐÔŽÂâ铧éÒÝ@½Ôå‘f¥".
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: