首页 文章

在C中的Caesar密码中使用argc和argv

提问于
浏览
-1

所以,我试图在Caesars密码中使用argc和argv,以便只用[./ key; string]执行程序(例如./ 13 Caesar) . 我已经尝试了很多方法,虽然我必须承认我真的迷失在这里 . 我在想我应该只使用main(void)并用fgets询问输入,但我仍然有一些好奇心:我怎么能用“int main(int argc,char * argv [])?”来使用它 . 你能给我的任何线索吗?

谢谢您的帮助 . 这是具有当前输出的代码:

#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>




 int main(int argc, char *argv[])
 {
    int key;
    int result;
    char str[60];
    int k = 0;



    printf("argc =%d\n", argc);
    printf("argv =%d\n", argv);
    printf("key =%d\n", key);



 if (argc != 2)
    {
        printf("You didn't enter a key.\n");
        return 1;
    }

 else
    {
        int k = key % 26;
        printf("k =%d\n", k);

        if (k == 0)
        {
            printf("Invalid key.\n");
            return 1;
        }
    }
 }

输出:

$ ./ceasar 13
argc =2
argv =-13216
key =0
k =0
Invalid key.

编辑:暂定答案

int main(int argc, char* argv[])
{
    int i;
    int key = atoi(argv[1]);
    int result;
    char str[60];

for (i = 0; i < argc; i++)
{
    printf("argv[%d] = %s\n", i, argv[i]);
}

 if (argc != 2)
    {
        printf("You didn't enter a key.\n");
        return 1;
    }
 else
    {

        if (key == 0)
        {
            printf("Invalid key.\n");
            return 1;
        }
    }
}

1 回答

  • 1

    使用 "%d" 说明符打印 argv 是未定义的行为,请阅读 printf() 的手册并使用 "%p" .

    另一方面,如果要打印字符串,则应使用数组表示法访问相应的元素 . 例如

    printf("First Argument: %s\n", argv[1]);
    

    这适用于所有参数,注意 argv[0] 是在命令行中调用的可执行文件的名称 .

    在访问 argv[1] 之前还应该小心检查 argc > 2 ,并始终检查当前参数!

相关问题