【发布时间】:2017-04-11 19:04:08
【问题描述】:
首先,我说的是用 gcc 编译的老式 ANSI-C(我的意思是 ANSI 标准,没有 C99 或更高版本)。我只能使用下面代码中可以看到的库。
我的问题是我有一个程序在终端上以以下方式调用:
program < integer_1 integer_2
虽然我已经能够弄清楚如何检查参数的数量,但我仍然坚持检查它们是否是整数。 如果程序是这样调用的:
program < 1 -13
它应该毫无怨言地运行,但如果它是这样运行的:
program < s 7
它应该抛出一个错误。
到目前为止,我所尝试的一切都是垃圾。到目前为止,我管理的最好的事情是如果第二个数字是字符,则会出现错误消息。我的尝试都无法处理超过一位数,但我已经弄清楚这是为什么。
问题是我现在没有在任何编程语言(C++、Java)中使用命令行/终端参数。如果有人能告诉我如何检查正确的输入,我将不胜感激。坦率地说,我没有想法。
如果我想处理大于 9 的数字,我是否正确,我必须从索引 2 开始遍历 argv 直到找到一个空格?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int arc, char *argv[])
{
if(arc != 3)
{
printf("Error: You have entered %d arguments, but two were expected!", arc - 1);
return -1;
}
return 0;
}
【问题讨论】:
-
所有命令行参数都是字符串。您可以使用
atoi()将字符串转换为整数,而无需进行错误检查,或者使用strtol()或其亲属之一,准确且敏感但非常delicate error checking。请注意,您的命令行显示<,这意味着shell 尝试从具有下一个参数(示例中的1和s)给出的名称的文件重定向标准输入,并删除<和命令行中的文件名。您应该简单地删除<符号。
标签: c parsing command-line-arguments c89