【问题标题】:Printing integers from command line arguments in C从 C 中的命令行参数打印整数
【发布时间】:2017-03-24 04:08:30
【问题描述】:
我正在使用一些命令行参数运行我的程序。但是当我输入 10、10、10 并打印出来时,它会打印出 49、49、49。这是我的代码:
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
为什么会这样??
【问题讨论】:
标签:
c
command-line-arguments
argv
argc
【解决方案1】:
好吧,argv 是一个指向字符串的指针数组。所有命令行参数都作为 字符串 传递,指向每个参数的指针由argv[n] 保存,其中参数的序列为n+1。
对于托管环境,引用 C11,第 5.1.2.2.1 章
如果argc的值大于零,则argv[0]指向的字符串
表示程序名; argv[0][0] 应为空字符,如果
程序名称在主机环境中不可用。如果argc 的值为
大于一,argv[1] 到 argv[argc-1] 指向的字符串
表示程序参数。
所以,显然,对于像这样的执行
./123 10 10 10 //123是二进制名称
解决方案:你需要
- 检查参数的数量 (
argc)
- 循环遍历每个参数字符串
argv[1] ~ argv[n-1] 而argc == n
- 将每个输入字符串转换为
int(对于这种情况,你可以使用strtol())
【解决方案2】:
取消引用字符串 (*argv[x]) 会得到一个 char(字符串中第一个字符的值),在这种情况下,该值为 ASCII '1':十进制 49
您可以使用 strtol 转换这些字符串(无需取消引用)
int arraySize = (int)strtol(argv[1], NULL, 10);
反正argv[0]是你的程序名,你确定程序名是1开头的吗?