Importer:Error:WasEmpty



  • Hi! Es soll ein Programm geschrieben werden, welches einen String einliest, mithilfe des XOR-Operators und einer Konstante verschlüsselt, also wegen (eingabekonstante)konstante=eingabe und dann wieder entschlüsselt.
    Sowohl verschlüsselter als auch entschlüsselter String sollen ausgegeben werden.

    #include <stdio.h>
    #define KONSTANTE 15
    
    int main(){
    	char eingabe[30];
    	char schluessel[30];
    	int i=0,k=0;
    	printf("Geben Sie einen String von maximal 30 Zeichen ein: \n\n");
    	scanf("%s",&eingabe);
    
    	while(eingabe[i]!='\0'){
    		schluessel[i]=eingabe[i]^KONSTANTE;
    		i++;}
    	printf("Der String lautet in verschluesselter Form: %s\n\n",schluessel);
    
    	while(schluessel[k]!='\0'){
    		eingabe[k]=(eingabe[k]^KONSTANTE)^KONSTANTE;
    		k++;
    	}
    	printf("Der entschluesselte String lautet: %s\n\n",eingabe);
    	getchar();
    	getchar();
    	return 0;
    }
    

    Problem hierbei ist, dass die verschlüsselte Form zwar allerlei kryptische Buchstaben enthält, aber am Ende dieser Zeichenfolge wieder der ursprügliche String steht, was ja nicht Sinn einer Verschlüsselung ist.


  • Mod

    Nullterminierung vergessen.

    P.S.: Kommt dir der Code um Zeile 17 rum nicht ein bisschen komisch vor?



  • Vor Zeile 14 möchtest du wahrscheinlich noch schreiben:

    schluessel[i] = '\0';
    

    (Die Null-Terminierung von Strings ist wichtig, ansonsten wird immer weiter ausgegeben, auch wenn es dann halt der Inhalt von anderen Variablen o.ä. ist.)



  • Okay danke jetzt gehts. Nur so ganz verstanden habe ich die Null-Terminierung nicht. Wo setzt die an?

    Mit ist bewusst, dass das logische Zeichen 0 einen String beendet, aber ich wusste nicht, dass ich das nach einer Schleife auch nochmal explizit machen muss.



  • Krachi schrieb:

    Mit ist bewusst, dass das logische Zeichen 0 einen String beendet, aber ich wusste nicht, dass ich das nach einer Schleife auch nochmal explizit machen muss.

    Du musst das nicht "nach einer Schleife" machen. Du musst das machen, weil der String in schluessel an dieser Stelle noch nicht nullterminiert ist. Am Anfang war schluessel uninitialisert, dh 30 "zufällige" Zeichen. Dann hast du ein paar Zeichen mit irgendwas verschlüsseltem beschrieben. Der Rest dahinter ist immer noch "zufällig". Wo ist die 0?

    BTW was passiert eigentlich, wenn eingabe[k] ^ KONSTANTE mal 0 ergibt?



  • Ok thx, habs kapiert.

    Wennn die Konstante 0 ist, dann wird der String ohne bitweise Verschiebung in "Schlüssel" überführt.

    Es findet also gar keine Verschlüsselung statt.



  • Ich hab nichts davon geschrieben, dass die Konstante 0 ist. Bitte genauer lesen...



  • puuuh, das weiß ich nicht 😕


  • Mod

    Krachi schrieb:

    puuuh, das weiß ich nicht 😕

    Hast du dir denn inzwischen mal angesehen, was die Nullterminierung von Zeichenketten bedeutet? Was passiert denn wohl nun, wenn mitten in einer Zeichenkette eine 0 auftaucht?



  • Und das & in Zeile 9 (beim scanf) ist überflüssig da eingabe ein Array ist.


Anmelden zum Antworten