kake_fisk Skrevet 30. august 2009 Del Skrevet 30. august 2009 Jeg prøver å lage en funksjon som enkrypterer tekst, men får noen feilmeldinger. Her er feilmeldingen: D:\C++\Bricked 2\main.cpp|364|error: initializer fails to determine size of `msg'| Her er funksjonen min: string encrypt(string str, int key) { char msg[] = str; int len = strlen(msg); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i=1;i<len+1;i++) { crypt[i] = msg[i] ^ key*i; } return crypt; } Lenke til kommentar
Giddion Skrevet 31. august 2009 Del Skrevet 31. august 2009 Hvis jeg ikke tar helt feil så kan du ikke bruke: char msg[] = str; Ettersom str ikke er konstant. Du må derfor bruke: string msg[] = str; Lenke til kommentar
NevroMance Skrevet 31. august 2009 Del Skrevet 31. august 2009 Siden du allerede bruker string kan du jo bruke den skikkelig istedenfor å gjøre den om til et char-array. Du kan indexere en string med [], og du kan finne lengden på strengen med string.size(); Lenke til kommentar
kake_fisk Skrevet 31. august 2009 Forfatter Del Skrevet 31. august 2009 Takk, det virka perfekt. Bare at Giddeon mente vell ikke å ha den arrayen i msg stringen? Men så har jeg ett problem til, det er med decrypte funksjonen min. Den decrypter ikke, tror det ser ut som den bare encrypter den bedre eller noe sånnt. Her er koden: string encrypt(string str, int key) { string msg = str; int len = str.size(); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i=1;i<len+1;i++) { crypt[i] = msg[i] ^ key; } return crypt; } string decrypt(string str, int key) { string msg = str; int len = str.size(); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i=1;i<len+1;i++) { crypt[i] = msg[i] ^ key; } return crypt; } Hvis det kunne hjelpe noe, så her er måten jeg gjør det på utenfor en funksjon, som virker: string msg = "Hello World!"; int len = msg.size(); char* crypt = (char*)malloc(len + 1); crypt[len] = 0; for(int i=1;i<len+1;i++) { crypt[i] = msg[i] ^ i; } cout << "Encrypted: " << crypt << endl; for(int i=1;i<len+1;i++) { msg[i] = crypt[i] ^ i; } cout << "Decrypted: " << msg << endl; Lenke til kommentar
GeirGrusom Skrevet 31. august 2009 Del Skrevet 31. august 2009 Det skal ikke være nødvendig å blande C og C++ på den måten du gjør der. I de fleste tilfeller trenger du aldri å bruke arrays manuelt slik du gjør der. Alt kan behandles av container klasser fra STL. string transform(sting& input, char key) { string ret; for(int i = 0; i < input.size(), i++) ret += input[i] ^ key; return ret; } Tror jeg skal fungere (har ikke C++ på denne maskinen) Lenke til kommentar
kake_fisk Skrevet 31. august 2009 Forfatter Del Skrevet 31. august 2009 Neinei, skjønner det, men det var den eneste metoden jeg visste om. Fordi jeg vet ikke helt hvordan jeg kan ta bokstav for bokstav å xor-e i c++. Men koden din gav en feilmelding: D:\C++\Bricked 2\main.cpp|376|error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'const char*'| Her er den: string crypt(string& input, char key) { string ret; for(int i=0;i<input.size();i++) { ret += input[i] ^ key; } return ret; } Mer hvorfor bruker du char som key? Jeg bruker alltid int. Lenke til kommentar
GeirGrusom Skrevet 31. august 2009 Del Skrevet 31. august 2009 (endret) Fordi du ikke får xor-et en char med en int allikevel, men det spiller egentlig ingen rolle. Feilmeldingen kan være fordi funksjonen jeg skrev tar string og ikke char* som ikke kan castes direkte. Bruk constructor til string for å danne en string fra en char* Igjen, ikke bruk char* eller andre arrays uten noen god grunn for det. Det vil føre til at du får færre minnelekasjer i lengden ^^ Endret 31. august 2009 av GeirGrusom Lenke til kommentar
kake_fisk Skrevet 31. august 2009 Forfatter Del Skrevet 31. august 2009 Ojaa, hadde jo glemt å fjerne c_str() funskjonen fra istad. Men nå får jeg fortsatt en feilmelding: D:\C++\Bricked 2\main.cpp|376|error: invalid initialization of non-const reference of type 'std::string&' from a temporary of type 'std::string'| Lenke til kommentar
GeirGrusom Skrevet 31. august 2009 Del Skrevet 31. august 2009 gjør første parameter const kanskje... vet ikke helt. Lenke til kommentar
kake_fisk Skrevet 31. august 2009 Forfatter Del Skrevet 31. august 2009 (endret) Jeg fiksa det med å bare fjerne referense operatoren i det første argumentet i funskjonen. Takk Endret 31. august 2009 av kake_fisk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå