int
main(int argc, char *argv[]) {
int n;
if (2 <= *argv[1] && *argv[1] <= 20){
n = *argv[1];
return 0;
}
所以我试图设置 n = argv[1] 的值。输入是"C: myprogram 4"
这样,输出应该是 4。但是当我打印 n 的值时,我得到了 52。这是为什么呢?
int
main(int argc, char *argv[]) {
int n;
if (2 <= *argv[1] && *argv[1] <= 20){
n = *argv[1];
return 0;
}
所以我试图设置 n = argv[1] 的值。输入是"C: myprogram 4"
这样,输出应该是 4。但是当我打印 n 的值时,我得到了 52。这是为什么呢?
'4'
is not 4
but的 ASCII 码52
。如果您想要实际数字而不是字符串,请使用atoi(argv[1])
将第一个参数转换为整数。
当您通过命令行参数传递某些内容时,它们默认为字符流并分配给**argv
. 当您获取时,argv[i][j]
您会得到一个字符。
如果你这样做,argv[i]
你会得到一个适合你的字符串"4"
。所以,你正在尝试的是错误的。
你得到的原因52
是字符的ascii值4
是52
使用内置的,atoi(str)
你可以将字符串转换为"438"
整数438
参考这段代码:
#include<stdio.h>
int
main(int argc, char *argv[]) {
int n=-1; //initialized to prevent garbage incase if case fails
if (2 <= atoi(argv[1]) && atoi(argv[1]) <= 20){
n = atoi(argv[1]);
}
printf("%d",n);
return 0;
}
注意类型argv[i]
:
main(int argc, char* argv[])
^
| argv[i] is a string.
如果您索引和访问它的元素,*argv[i]
它基本上是一个char 而不是 int。这就是'4'
解释为52
char 的 ASCII 值的原因'4'
。
要将和argv[i]
值视为整数,请将其转换为 int。更好地转换使用int atoi (const char * str);
int n = atoi(argv[i]);
注意:以下都是不同的:
4 is a int
'4' is a char
"4" is a string (\0 terminated)
argc
此外,最好使用--argument counter检查传递给 main 的参数数量。
if(argc < NoOfArgumentsNeeded) {
// print error and exit
}