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.为什么会这样?
答案 0 :(得分:3)
'4'
的ASCII代码不是4
,而是52
。如果您想要实际数字而不是字符串,请使用atoi(argv[1])
将第一个参数转换为n整数。
答案 1 :(得分:0)
请注意argv[i]
的类型:
main(int argc, char* argv[])
^
| argv[i] is a string.
如果索引和访问*argv[i]
的元素,它基本上是 char not int 。这就是'4'
被解释为52
的原因,它是char '4'
的ASCII值。
将for和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
- 参数计数器检查传递给main的参数数量是很好的。
if(argc < NoOfArgumentsNeeded) {
// print error and exit
}
答案 2 :(得分:0)
当您通过命令行参数传递某些内容时,它们默认为字符流,并分配给**argv
。当您获取argv[i][j]
时,您将获得一个字符。
如果你argv[i]
,你会得到一个"4"
的字符串。所以,你所尝试的是错误的。
您52
的原因是字符4
的ascii值为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;
}