整数从stringv []收到错误的值

时间:2016-11-27 13:31:10

标签: c encryption casting do-while caesar-cipher

Caesar Cypher - 基本加密。

例如,即使第二个命令行(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);

2 个答案:

答案 0 :(得分:0)

你不能只是将字符串转换为int。你需要实际解析它。您可以使用atoi中包含的stdlib.h功能。你需要提出:

#include <stdlib.h>

位于文件顶部并更改行:

k = (int) argv[1];

为:

k = atoi(argv[1]);

答案 1 :(得分:0)

你需要做的是concat(Observable.never())而不是conversion,因此type-cast的类型转换不会有帮助,你需要转换{{1} {}使用库函数来int,就像常用的char *一样,它在头文件int中定义。别忘了int atoi (const char *str)它。 !

但是,我建议使用stdlib.h,因为它具有强大的错误报告功能。它指定溢出时的返回值(如果出现#include则返回strtol,出现溢出时返回LONG_MIN)并允许用户将underflow设置为在转换期间跟着。