2017-10-12 4 views
-1

Ich wurde von einem Online-Kurs auf eine Übung zu arbeiten, wenn ich auf thos stolperte, zog ich den Code von fast alles, aber dies noch geschieht, mein Code wird alsPrintf druckt den Inhalt von zwei Variablen

static const char alphabet1[] = "abcd"; 
void mycrack(char* hashed) 
{ 
    char pass[4]; 
    char salt[2]; 
    for (int a = 0, size = sizeof(alphabet1); a < size - 1; ++a) { 
     for (int b = 0, size = sizeof(alphabet1); b < size - 1; ++b) { 
      for (int c = 0, size = sizeof(alphabet1); c < size - 1; ++c) { 
       for (int d = 0, size = sizeof(alphabet1); d < size - 1; ++d) { 

        pass[a] = alphabet1[a]; 
        pass[b] = alphabet1[b]; 
        pass[c] = alphabet1[c]; 
        pass[d] = alphabet1[d]; 
        salt[0] = '5'; 
        salt[1] = '0'; 



        printf("salt:%s  \n",salt); 


       } 
      } 
     } 
    } 
} 
int main(int argc, string argv[1]) 
{ 
    mycrack(argv[1]); 

    return 0; 
} 
folgt

aber wo printf sollte das Salz (50) für jeden itteration i das Salz erhalten drucken + den Pass: ex

salt:50a  
salt:50ab  
salt:50abc  
salt:50abcd  
salt:50abcd  
salt:50abcd  
salt:50abcd  
salt:50abcd  
salt:50abcd  
salt:50abcd  
salt:50abcd 

bitte, beachten Sie, ich weiß, dass ich innerhalb eines statischen Wert sein sollte nicht erneut erklärt Die Schleife, aber ich habe den Code angepasst, der Originalcode hängt von Argv-Eingabe und dafür ab wäre schwieriger zu veranschaulichen.

+6

Sie scheinen, dass 'char' Strings in C zu vergessen sind wirklich *** nullterminierte ** Byte-Strings * bezeichnet. Der Null-Terminator ist wichtig, um nicht zu vergessen. Und beachten Sie, dass der Null-Terminator das Zeichen ''\ 0'' ist, kein Null-Zeiger (wie' NULL' ist). Das bedeutet natürlich, dass eine Zeichenfolge aus zwei Zeichen Platz für * drei * Zeichen benötigt, um an den Terminator zu passen. –

+0

@Someprogrammerdude, danke für die Hilfe, ich bin an höhere Sprachen gewöhnt und total vergessen, damit umzugehen. –

+0

'Größe = Größevon (Alphabet1); a ist bedeutungsloser Code Bloat, stattdessen 'a Lundin

Antwort

0

Problem von @Someprogrammerdude in den Kommentaren beantwortet:

„Sie scheinen, dass char Strings in C zu vergessen sind wirklich nullterminierten Byte-Strings genannt Der Nullabschluss wichtig, nicht zu vergessen, und beachten Sie, dass die.. null-terminator ist das Zeichen '\ 0', kein Null-Zeiger (wie NULL ist). Das bedeutet natürlich, dass eine Zeichenfolge aus zwei Zeichen Platz für drei Zeichen benötigt, um an den Terminator zu passen. "

Lösung

char pass[5] = ""; 
char salt[3] = ""; 

statt

char pass[4]; 
char salt[2]; 
+0

Warum initialisierst du das letzte Element der 'char'-Arrays? – ryyker

+0

Ich mache das, um der Zeichenfolge ein Ende zu setzen. –

+0

Ich sehe das, aber sollte es nicht Ihre Absicht sein, das nullte Element zu initialisieren? Oder, noch besser, initialisiere die Variable in ihrer Deklarationsanweisung. _ [Werfen Sie einen Blick darauf] (https://Stackoverflow.com/a/26104331/645128) _ – ryyker

Verwandte Themen