我正在使用一些命令行参数运行我的程序。但是当我输入10,10,10并打印出来时,它打印出49,49,49。这是我的代码:
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
为什么会这样?
答案 0 :(得分:1)
好吧,layout
是一个指向字符串的指针数组。所有命令行参数都作为字符串传递,每个命令行参数都由argv
保存,其中参数的序列为argv[n]
。
对于托管环境,引用n+1
,章节§5.1.2.2.1
如果
C11
的值大于零,则argc
指向的字符串 表示程序名称;argv[0]
如果是,则为空字符 程序名称不能从主机环境中获得。如果argv[0][0]
的值是 大于一,argc
通过argv[1]
指向的字符串 代表程序参数。
显然,对于像
这样的执行./ 123 10 10 10 // 123是二进制名称
argv[argc-1]
不是第一个传递给程序的“命令行参数”。它是argv[0]
。 argv[1]
不会返回您作为命令行参数传递的*argv[1]
值。
基本上,int
为您提供字符串的第一个元素的值(即*argv[1]
的{{1}}值),最有可能是ASCII编码值(您平台使用的),根据ascii table {ans} char
具有小数va; '1'
的lue,您看到了。
解决方案:您需要
'1'
)49
argc
argv[1] ~ argv[n-1]
(对于这种情况,您可以使用strtol()
)答案 1 :(得分:1)
取消引用字符串(*argv[x]
)会得到char
(字符串中第一个字符的值),在这种情况下,值为ASCII '1'
:decimal 49
您可以使用strtol
转换这些字符串(无需取消引用)int arraySize = (int)strtol(argv[1], NULL, 10);
无论如何argv[0]
是你的程序的名称,你确定程序名称以1开头吗?