2016-11-27 18 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]);