2016-11-27 10 views
0

Caesar Cypher - 基本暗号化。整数がstringv []から間違った値を受け取る

私は、第2のコマンドライン(argv [1])が3に等しい場合でも、変数kが負の値を受け取る理由を理解する助けを求めます。

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'は標準型ではありません。 [ask]を参照し、[mcve]を提供してください。 – Olaf

答えて

0

conversionですtype-castではなく、intにタイプキャストすると助けにならないでしょう。char *intに変換する必要があります。 yはint atoi (const char *str)で、ヘッダファイルstdlib.hで定義されています。 #includeを忘れないでください。 !

しかし、私はstrtolを使用することをお勧めします。なぜなら、それは堅牢なエラー報告であるからです。オーバーフロー時の戻り値を指定します(オーバーフローの場合はunderflowおよびLONG_MAXの場合は戻ります)。変換中にbaseを設定することもできます。

0

文字列をintにキャストすることはできません。あなたはそれを実際に解析する必要があります。 stdlib.hに含まれるatoi関数を使用できます。

k = (int) argv[1]; 

:ファイルの先頭に

#include <stdlib.h> 

をして行を変更:あなたは配置する必要がありますあなたがここに行うために必要なもの

k = atoi(argv[1]); 
関連する問題