[英]Printing integers from command line arguments in C
我正在使用一些命令行参数运行程序。 但是,当我输入10、10、10并打印出来时,它会打印出49、49、49。这是我的代码:
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]
为您提供该字符串的第一个元素的值(即char
值'1'
),最有可能采用ASCII编码值(您使用的平台),并根据ascii表 a您会看到'1'
的十进制va; lue为49
。
解决方案:您需要
argc
) argv[1] ~ argv[n-1]
而argc == n
int
(在这种情况下,您可以使用strtol()
) 取消引用字符串( *argv[x]
)会得到一个char
(字符串中第一个char
的值),在这种情况下,值是ASCII'1 '1'
:十进制49
您可以使用strtol转换这些字符串(无需取消引用)
int arraySize = (int)strtol(argv[1], NULL, 10);
无论如何, argv[0]
是您的程序的名称,您确定程序名称以1开头吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.