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

Integer receives wrong value from stringv[]

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);

您不能只将字符串转换为 int。您需要实际解析它。您可以使用 stdlib.h 中包含的 atoi 函数。您需要输入:

#include <stdlib.h>

在您的文件顶部并更改行:

k = (int) argv[1];

至:

k = atoi(argv[1]);

您在这里需要做的是 conversion 而不是 type-cast,因此类型转换为 int 无济于事,您需要将 char *int 使用库函数,如常用的 int atoi (const char *str),它在头文件 stdlib.h 中定义。别忘了 #include 它。 !

但是,我建议使用 strtol,因为它具有强大的错误报告功能。它指定溢出时的 return 值(returns LONG_MINunderflow 的情况下和 LONG_MAX 在溢出的情况下)并且还允许用户设置转换期间要遵循的 base