2016-07-15 13 views
-3

Also ich versuche, die Ceasar Cipher mit char * ‚s zu verwenden, ich habe eine einfache Funktion aus wie folgt geschrieben:Caesar Cipher mit char *? C++

char * Encrypt(char * s, int k) 
{ 
    char * c = s; 

    for(int i = 0; i < strlen(s); i++) 
     c[i] += k; 

    return c; 
} 

, der wie sollte es aussehen scheint arbeiten, aber es funktioniert nicht. Beim Ausführen des Programms wird ein Fehler ausgegeben. Hier

ist ein Beispiel dafür, wie ich nenne diese Funktion: „warum nicht nur string verwenden“

int main() 
{ 
    cout << Encrypt("hello", 2) << endl; 
    system("pause"); 
    return 0; 
} 

Und bevor Sie sagen, na ja die Antwort I C ich schreibe ++ auf einem bestimmten SDK, das verursacht Compilerfehler bei der Verwendung von string. Ok, aber ja, jede Form der Hilfe wird sehr geschätzt werden, danke!

+0

Wenn Sie 'std :: string' nicht verwenden (oder nicht verwenden können), sollten Sie die korrekten C-Bibliotheksfunktionen verwenden, um den Inhalt von' Source' in ein Array von geeigneter Größe * zu kopieren. Ansonsten modifizierst du 'Source'. – crashmstr

+0

Denken Sie daran, dass char unsigned kurz ist, Ihre Verschlüsselung funktioniert möglicherweise nicht, wenn Ihr Schlüssel den Wert außerhalb des Char-Bereichs überschreitet. –

+2

Lassen Sie mich raten, rufen Sie diese Funktion mit einem String-Literal? Bitte versuchen Sie, ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und zeigen Sie uns. besonders, wie Sie diese Funktion nennen. –

Antwort

6

Zeichenfolgenliterale wie "Hello" sind Nur lesen. Wenn Sie versuchen, eine solche Zeichenfolge zu ändern, haben Sie undefined Verhalten.

In C++ String-Literale sind tatsächlich Arrays Konstante Zeichen.

Mit char* Zugriff auf ein String-Literal sollte Ihren Compiler, um eine Warnung an Sie schreien. Wenn nicht, müssen Sie Ihre Warnstufe erhöhen oder weitere Warnungen aktivieren. Wenn Sie wirklich in C++ programmieren, empfehle ich Ihnen, über std::string und find a good beginners book zu lesen.

+0

Es ist das Modifizieren, dass das Problem ist. Ein gutes Compiler-/Ausführungssystem wird nur die konstante Zeichenfolge im Nur-Lese-Speicher sein. – zaph