我用一些命令行参数运行我的程序。但是,当我输入10,10,10,并打印出来,它打印出49,49,49,这里是我的代码:从C中的命令行参数打印整数
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
这究竟是为什么?
我用一些命令行参数运行我的程序。但是,当我输入10,10,10,并打印出来,它打印出49,49,49,这里是我的代码:从C中的命令行参数打印整数
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
这究竟是为什么?
那么,argv
是指向字符串的指针数组。所有命令行参数都以字符串的形式传递,并且指向每个命令行参数的指针都由argv[n]
保存,其中参数的序列为n+1
。
对于托管环境,引用C11
,章§5.1.2.2.1
如果
argc
值大于零,则字符串由argv[0]
指出,代表程序名称;如果 程序名称在主机环境中不可用,则argv[0][0]
应为空字符。如果argc
的值是 大于1,则由argv[1]
到argv[argc-1]
指向的字符串表示程序参数。
因此,很明显,对于像
./123 10 10 10 // 123的执行是二进制名称
argv[0]
未在第一个“命令行参数传递给程序“。这是argv[1]
。*argv[1]
不会返回您作为命令行参数传递的int
值。
基本上,*argv[1]
给你(即,'1'
一个char
值),最有可能在ASCII编码值(你平台使用),ANSD根据ascii table一个'1'
该字符串的第一个元素的值有小数点;你看到的49
。
解决方案:你需要
argc
)的数量argv[1] ~ argv[n-1]
而argc == n
int
(对于这种情况,您可以使用strtol()
)解引用一个字符串(*argv[x]
)给你一个char
(在字符串中的第一个字符的值),在这种情况下,值是ASCII '1'
:十进制49
您可以将这些字符串(没有提领)使用strtol
int arraySize = (int)strtol(argv[1], NULL, 10);
反正argv[0]
是你的程序的名字,你确定那个程序名从1开始?