Probleme mit eigener Funktion
-
Hallo erstmal

Ich hab da ein Problem mit ein paar Funktionen in meinem Programm. Leider kann ich nicht genau ausmachen, WO das Problem liegt.
Hier mal die Codezeilen für das einlesen der Highscore Datei das schreiben dieser und das verschlüsseln der Daten.
void Highscore::read() { char scorepfad[MAX_PATH]; GetCurrentDirectory(MAX_PATH, scorepfad); ldatei.open(strcat (scorepfad, "\\highscore.hsc"), ios_base::in); for(int i = 0; i < 10; i++) { getline(ldatei, score[i]); score[i] = crypt(score[i], "downtimes", false); } ldatei.close(); } string Highscore::crypt(string inp, string key, bool mode) { string z, cptstring, str1; char c; unsigned int position = 0; int cptzahl, orgzahl, keyzahl; for(unsigned int i = 0; i < inp.length(); i++) { strcpy(&c, (str1.assign(key, position, 1).c_str())); keyzahl = c; position++; if(position > key.length()) position = 1; if(mode) { //Verschlüsseln strcpy(&c, (str1.assign(inp, i, 1).c_str())); orgzahl = c; cptzahl = orgzahl ^ keyzahl; ostringstream Str; Str << cptzahl; cptstring = Str.str(); if(cptstring.length() < 2) cptstring = "0" + cptstring; z += cptstring; } else { //Entschlüsseln cptstring.assign(inp, i, 2).c_str(); i++; cptzahl = atoi(cptstring.c_str()); orgzahl = cptzahl ^ keyzahl; c = orgzahl; z += c; } } return z; }; void Highscore::write(string name, int punkte) { char scorepfad[MAX_PATH]; GetCurrentDirectory(MAX_PATH, scorepfad); string p; ostringstream Str; Str << punkte; p = Str.str(); while(p.length() < 10) { p += " "; } for(int i = 9; i > pos; i--) { score[i] = score[i - 1]; } score[pos] = name + p; sdatei.open(strcat (scorepfad, "\\highscore.hsc"), ios_base::out); for(int i = 0; i < 10; i++) { score[i] = crypt(score[i], "downtimes", true); sdatei << (score[i] + "\n"); } sdatei.close(); read(); };Wenn ich das Programm auf meinem eignen PC in der IDE laufen lasse tut alles Einwandfrei. Schicke ich das Projekt aber nun zu einem Freund mit gleichem Betriebsystem usw und er führt es aus dann bekommt er in der Ausgabe teilweise richtige und teilweise falsche Zeichen ausgegben. Er besitzt aber die gleiche "highscore.hsc" Datei wie ich auch.
Hat einer eine Ahnung woran dieser Unterschied zwischen ihm und mir liegen könnte?
Vielen dank schonmal im Voraus für jegliche Hilfe
MFG downtimes
-
Was soll die Funktion
strcpy(&c, (str1.assign(key, position, 1).c_str()));bewirken?
Du weist einem einzelnen char einen string zu... (Speicherüberschreiber)Und die Umwandlung der Zeichen in Zahlen verstehe ich auch nicht.
Normalerweise wird einfach der Text zeichenweise mit dem Key verschlüsselt/entschlüsselt.
-
Schien wohl wahrlich an betreffender Codezeile zu liegen.
Das kommt davon, wenn man sich als neuling an so sachen wagt

Danke für die Hilfe mittlerweile habich nen besseren Weg gefunden mein Problem zu realisieren
MFG downtimes
-
Vielen Dank, hab das ganze jetzt komplett umgeschrieben und es funktioniert jetzt.
Sieht so aus:[code] void Highscore::split(string source, const char* delimeter, string array[]) { int j = 0, k = -1; unsigned int i = 0; string str; i = source.find(delimeter, i + 1); while(i != string::npos) { array[j] = str.assign(source, k + 1, i - (k + 1)); j++; k = i; i = source.find(delimeter, i + 1); } } void Highscore::read() { char scorepfad[MAX_PATH]; GetCurrentDirectory(MAX_PATH, scorepfad); ldatei.open(strcat (scorepfad, "\\highscore.hsc"), ios::binary); ldatei.seekg(0, ios::end); size_t len = ldatei.tellg(); ldatei.seekg(0, ios::beg); char* buf = new char[len]; ldatei.read(buf, len); ldatei.close(); string str = crypt(buf, "downtimes", false, len); delete[] buf; split(str, "~", &score[0]); } void Highscore::write(string name, int punkte) { char scorepfad[MAX_PATH]; GetCurrentDirectory(MAX_PATH, scorepfad); string p; ostringstream Str; Str << punkte; p = Str.str(); for(int i = 19; i > pos; i--) { score[i] = score[i - 2]; i--; score[i] = score[i - 2]; } score[pos * 2] = name; score[pos * 2 + 1] = p; string s; for(int i = 0; i < 20; i++) { s += score[i]; s += "~"; } char* buf = new char[s.size()]; strcpy(buf, s.c_str()); s = crypt(buf, "downtimes", true, s.size()); strcpy(buf, s.c_str()); sdatei.open(strcat (scorepfad, "\\highscore.hsc"), ios::binary | ios_base::trunc); sdatei.write(buf, s.size()); sdatei.close(); delete[] buf; }; string Highscore::crypt(char* inp, string key, bool mode, int len) { string z; char c; unsigned int position = 0; int cptzahl, orgzahl, keyzahl; for(int i = 0; i < len; i++) { strcpy(&c, key.substr(position, 1).c_str()); keyzahl = c; position++; if(position > key.length()) position = 0; if(mode) { //Verschlüsseln orgzahl = inp[i]; cptzahl = orgzahl ^ keyzahl; z += cptzahl; } else { //Entschlüsseln cptzahl = inp[i]; orgzahl = cptzahl ^ keyzahl; z += orgzahl; } } return z; }; [/code]