2016-11-27 1 views
0

Caesar Cypher - Grundlegende Verschlüsselung.Integer erhält falschen Wert von stringv []

Ich würde um Ihre Hilfe bitten, zu verstehen, warum die Variable k einen negativen Wert erhält, selbst wenn die zweite Befehlszeile (argv [1]) beispielsweise 3 ist.

int main (int argc, string argv[]) 
{ 
    string text; 
    int k = 0; 

    do 
    { 
     printf("Type in a plain text:\n"); 
     text = GetString(); 

//k receives wrong value 
     k = (int) argv[1]; 

// Sanity check 
     printf ("argv[1] is %s and k is %d\n", argv[1], k); 
    } 
    while (k < 0); 
+0

'string' ist kein Standardtyp. Sehen Sie [ask] und stellen Sie [mcve] bereit. – Olaf

Antwort

0

Was Sie hier tun müssen, ist ein conversion anstelle einer type-cast, daher Typ-Casting zu int wird nicht helfen, müssen Sie die char * zu int mit einer Bibliotheksfunktion, wie der commonl konvertieren y verwendet int atoi (const char *str), die in der Header-Datei stdlib.h definiert ist. Vergessen Sie nicht, #include es. !

Allerdings würde ich vorschlagen, strtol, wegen seiner robusten Fehlerberichterstattung zu verwenden. Sie gibt den Rückgabewert bei Überlauf an (gibt LONG_MIN bei underflow und LONG_MAX im Falle eines Überlaufs zurück) und ermöglicht dem Benutzer außerdem, base während der Konvertierung festzulegen.

0

Sie können die Zeichenfolge nicht einfach an einen int übergeben. Sie müssen es tatsächlich analysieren. Sie können die in stdlib.h enthaltene Funktion atoi verwenden.

#include <stdlib.h> 

am Anfang der Datei und ändern Sie die Zeile: Sie werden setzen müssen

k = (int) argv[1]; 

zu:

k = atoi(argv[1]);