2016-12-21 5 views
-4

Ich habe ein Problem, mit diesem und ich wollte wissen, wenn jemand von Ihnen beheben könnte, wird sehr geschätzt werden!Brauchen Sie Hilfe für Strlen

Ich versuche, eine Nachricht zu verschlüsseln, um Menschen in meinem Spiel

Problem zu senden: Wenn ich versuche, meine Botschaft zu senden, das 1. Mal Werke gehend, und zeigen den Text auf Brief und das zweite Mal ist Gonna zeigen den verschlüsselten Text, und ich will die Leute nicht sehen, dass

("ZFDKWEK,CSJ,$MS(,,,)")

if (MessageEnc) 
        { 
        if (GET_GAME_TIMER() >= destroy_tick2){ 
         destroy_tick2 = GET_GAME_TIMER() + 82000; 
         int i = 0; 
         for (i = 0;i<18;i++) 
         { 
         if (i == PlayerId()) continue; 
         int Handle = GetPlayerHandle(i); 
         if(!DoesEntityExist(Handle)) continue; 
         char key = 'j'; //Key 
         char *encMess = "ZFDKWEK,CSJ,$MS(,,,)"; 

         for (int i = 0; i < strlen(encMess); i++) 
         { 
          encMess[i] ^= key; 
         } 
         char buf[64]; 
        snprintf(buf, sizeof(buf), "~r~%s", encMess); 
        NETWORK::NETWORK_HANDLE_FROM_PLAYER(i, &networkHandle, 13); 
        NETWORK::NETWORK_SEND_TEXT_MESSAGE(buf, &networkHandle);  
        printf(encMess);       
        } 
        } 
        } 
+1

Willkommen Überlauf zu stapeln. Bitte nimm eine [Tour], lies [ask] und erstelle eine [mcve]. Posten Sie kein Bild, wenn Sie Text posten können und vermeiden Sie bitte "Brauche Hilfe", "Ich habe ein kleines Problem, mit dem ich und ich wollte wissen, ob jemand von euch das beheben könnte, wird sehr geschätzt!", "Hallo alle zusammen "Und tu das nie" Wenn du mir helfen kannst zu reparieren, spende ich über Paypal :) ". Vielen Dank. – Stargateur

+0

Also, überspringe jeden zweiten. –

+1

Zerstöre deine Frage nicht, nachdem du Antworten erhalten hast. Das ist auf SO absolut nicht koscher. –

Antwort

3

Ihre XOR-Operation an jedem ungeraden Iteration der statischen Stringliteral wird verschlüsselt und dann Dezember rypting es auf immer sogar Iteration. Verwenden Sie einen tmp-Puffer, um das Ändern des Zeichenfolgenliterals zu vermeiden. Ich erinnere mich nicht an die Regeln, aber ich denke, dass der Versuch, den Speicherinhalt eines String-Literals zu ändern, undefined Verhalten Territorium eingeben. Daher ist es am besten, diese Art von Codierung zu vermeiden.

Ändern Sie diesen Satz von Code:

char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z"; 

for (int i = 0; i < strlen(encMess); i++) 
{ 
    encMess[i] ^= key; 
} 

char buf[64]; 
snprintf(buf, sizeof(buf), "~r~%s", encMess); 

Um dies:

char tmp[64]; 
const char *encMess = ",Z8J'Z$/3J.8Z:J&Z((3J-ZJ9?(9)8#(/J>ZJ'3J3Z?>?(/PJ9!3+)8Z"; 

strcpy(tmp, encMess, 64); 
size_t len = strlen(encMess); 

for (int i = 0; i < len; i++) 
{ 
    tmp[i] ^= key; 
} 

char buf[64]; 
snprintf(buf, sizeof(buf), "~r~%s", tmp);