C 如何从参数行中获取数字?

C 如何从参数行中获取数字?,c,C,我有这个密码 #include<stdio.h> int main(int argc, char * argv[]){ printf("%i\n", (int) *argv[1]) } #包括 int main(int argc,char*argv[]){ printf(“%i\n”,(int)*argv[1]) } 当我使用命令/a.out 6执行编译后的代码时,它会打印数字54,但我需要的正好是6。命令行参数是作为C字符串传递的,而不是作为数字传递的。不能将C字符串强制

我有这个密码

#include<stdio.h>

int main(int argc, char * argv[]){
printf("%i\n", (int) *argv[1])
} 
#包括
int main(int argc,char*argv[]){
printf(“%i\n”,(int)*argv[1])
} 

当我使用命令/a.out 6执行编译后的代码时,它会打印数字54,但我需要的正好是6。

命令行参数是作为C字符串传递的,而不是作为数字传递的。不能将C字符串强制转换为相应的数字,因为它是指向字符序列的指针,而不是数字本身

您的代码尝试将表示
6
的字符串中的第一个字符,即
“6”
,强制转换为
int
。转换成功,因为
char
是一个整数类型,但是您得到的是54而不是6,因为这是系统上
'6'
的字符代码

您可以使用来正确执行转换:

int n = atoi(argv[1]);
printf("%i\n", n);

您需要包含
才能编译此文件。

首先,您不能像这样将
char*
强制转换为
int
。看看
atoi()。
接下来,如果只想打印十进制数,则应使用
%d
标志,而不是
%i
。如果要打印每个参数,应该使用
%s
标志,这样就不必强制转换参数

最后但并非最不重要的一点是,在代码中,您不会打印参数,而是打印值的指针。6似乎指向54,这是它的ASCII值。 要打印该值,可以执行以下操作:

printf(“%d\n”,atoi(argv[1])


printf(“%s\n”,argv[1])

您正在将字符*强制转换为int。这将导致该字符的ASCII值。%i和%d指向同一事物,即有符号整数。
参考:
您可以使用以下内容

printf("%s", argv[1]);

printf("%d", atoi(argv[1]));

请记住,在使用atoi(argv)时,不应有其他ASCII字符,如-、+等。在这些情况下,atoi()将返回0,因为atoi()不会检测到任何错误(请参阅:)。所以记住从参数中去掉所有这些字符,只传递纯数字。或者,如果您喜欢,也可以编写自己的atoi()。

参数作为字符串数组传递。你需要。哦,在你尝试使用数组中的任何字符串之前,你一定要检查一个参数是否真的被传递了。例如,如果(argc>1){/*至少有一个参数*/}