所以,我试图在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 回答
使用
"%d"
说明符打印argv
是未定义的行为,请阅读printf()
的手册并使用"%p"
.另一方面,如果要打印字符串,则应使用数组表示法访问相应的元素 . 例如
这适用于所有参数,注意
argv[0]
是在命令行中调用的可执行文件的名称 .在访问
argv[1]
之前还应该小心检查argc > 2
,并始终检查当前参数!