2016-11-27 16 views
0

Caesar Cypher - 基本加密。Integer從stringv接收到錯誤的值[]

例如,如果第二個命令行(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'不是標準類型。看[問]並提供[mcve]。 – Olaf

回答

0

你需要在這裏做什麼是conversion而不是type-cast,因此輸入到int將無濟於事,您需要使用庫函數將char *轉換爲int,如commonl y使用int atoi (const char *str),它在頭文件stdlib.h中定義。別忘了#include吧。 !

但是,我會建議使用strtol,因爲它是強健的錯誤報告。它指定溢出時的返回值(如果發生溢出,則返回LONG_MIN,如果發生underflowLONG_MAX),並且還允許用戶在轉換過程中設置base

0

您不能只將該字符串強制轉換爲int。你需要實際解析它。您可以使用stdlib.h中包含的atoi功能。你需要把:

#include <stdlib.h> 

在你的文件的頂部和改線:

k = (int) argv[1]; 

到:

k = atoi(argv[1]);