Konvertieren von string zu char*
-
Hier ma der code
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <fstream>
#include <string>using namespace std;
void decrypt(char *secret, char* key)
{
char c;
char *k = key;
while((c = *secret) != 0)
{
*secret++ = (c-32) - ((*k)-64) + 32;
k = *(k+1) ? k+1 : key;
}
}
int main(...)
{
//variablen
int x = 0;
int y = 1;
string schluessel = "abcdefghijklmopqrstuvwxyz";
int laenge = schluessel.length();
string fast;
ofstream dat_aus;
string dateiname = "C:\\nachricht.txt";dat_aus.open(dateiname.c_str(), ios_base::out);
while(x != laenge)
{
//umwandlung
fast = schluessel.substr(x, y);
char *buffer = new char[1];
strcpy(buffer,fast.c_str());char *key = fast.c_str(); //Fegler!!!
//decrypt
char secret[100];
strcpy(secret, "Z]]_Y2ec%_hXH]P\%k_eS2OSW4n\\f+RJincNUS.QU_eLW].Ngn7F^.IY17XUSZZYmjJ");
decrypt(secret,key);//ausgabe und speichern
dat_aus << secret << "key: " << *key << endl;
cout << "Geheime Botschaft: " << secret << " key: " << *key << endl;
cout << x << endl;
//zähler
x++;
}dat_aus.close();
system("PAUSE");
return 0;
}
-
Die Schleife sieht mir falsch aus. Guck dir nochmal genau die
decrypt-Funktion an, speziell die Zeilek = *(k+1) ? k+1 : key;.
Das ginge mit deinem 1-Zeichen-Buffer schön in die Hose.Was willst du eigentlich machen? Alle Kleinbuchstaben als Schlüssel durchprobieren? Der Schlüssel wird aber sehr wahrscheinlich aus mehreren Buchstaben bestehen.
-
Die decrypt function ist geklaut aus einem einstellungstest von GData.Du hast recht, ich will wirklich aus einem schlüssel alle buchstaben ausprobieren, und die schleife hat bis jetzt noch immer funktioniert
-
Ok, bevor du dich bei G-DATA einstellen lässt, solltest du dich erstmal ein wenig mehr mit C- und C++-Strings beschäftigen. Die Decrypt-Funktion ist ein wunderschönes Beispiel für eine reine C-Funktion, die du hier versuchst mit C++-Mitteln zu mischen. Damit gibt es natürlich Probleme. Da du außerdem noch zu wenig mit C-Strings vertraut bist, hast du hier sogar undefiniertes Verhalten (du übergibst im Endeffekt einen Zeiger auf einen
char, wo eigentlich ein C-String mit Nullterminierung gefordert ist). Ich denke auch, dass es wenig bringt, die Komplettlösung dir einfach nur vorzusetzen.PS: ein Tipp: der gesuchte Schlüssel besteht ausschließlich aus Großbuchstaben.
-
Ich probiere nicht mich dort einstellen zu lassen(bin erst 14). Ich weiss auch das ich einen zeiger an eine char übergeben will(soweit bin ich per google auch schon gekommen), was eigentlich unnötig ist, denn ich könnte den code ja auch einfach umschreiben(ich kann zwar net all zuviel c/c++ , aber das würde ich hinkriegen).ich möchte nur wissen, ob und wie es möglich ist einen string an einen char* zu übergeben.
-
z-irgendwas schrieb:
Ich probiere nicht mich dort einstellen zu lassen(bin erst 14). Ich weiss auch das ich einen zeiger an eine char übergeben will(soweit bin ich per google auch schon gekommen), was eigentlich unnötig ist, denn ich könnte den code ja auch einfach umschreiben(ich kann zwar net all zuviel c/c++ , aber das würde ich hinkriegen).ich möchte nur wissen, ob und wie es möglich ist einen string an einen char* zu übergeben.
Um es wirklich korrekt zu machen, müsstest du eine Kopie anlegen. Zum Beispiel so wie ipsec es dir gezeigt hat. Plus ein weiteres Nullzeichen noch anhängen (
buffer.push_back('\0');zwischen den beiden Anweisungen).
-
oh, hatte ich im eifer des gefechts übersehen
-
const_cast<char*>(str.c_str()) hatt tatsächlich funktioniert.
vielen dank leute(besonders an ipsec)
-
z-irgendwas schrieb:
const_cast<char*>(str.c_str()) hatt tatsächlich funktioniert.
vielen dank leute(besonders an ipsec)Aua. Hast du mal durchgelesen, was ipsec zu dieser Methode geschrieben hat? Das ist ein schlimmer Hack für ganz Hartgesottene die genau wissen auf was sie sich da einlassen (z.B. ipsec). Oder für Leute die nicht wissen was sie tun und später ganz furchtbare Bugs produzieren wollen (z.B. dich).
-
ja das hab ich mir durchgelesen, no risk no fun.
für container und templates muss ich noch ein bisschen was dazulernen;)