表单的命令行输入:
exeName -a argumentA -b argumentB -c argumentC
需要将每个参数提取到相应的变量中(即int a = argumentA等)。
出现函数getop()用于查找命令行选项。
但是,我没有看到如何在每个选项后获取指针(所以我可以在它之后拉出参数)。
手册页中的这个引用听起来像......但没有太多关于如何使用它的信息:
“如果getopt()找到另一个选项字符,则返回该字符 字符,更新外部变量optind和静态变量 nextchar“
如何在每个命令行选项后使用getop()设置指向参数的指针?
答案 0 :(得分:1)
从联机帮助页继续:
[If ...该选项需要参数] getopt()在
optarg
中的同一argv元素或以下argv元素的文本中放置指向以下文本的指针强>
optarg
出现在头文件unistd.h
中,其中(也根据联机帮助页)包含:
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
换句话说,它是一个全局变量,通过调用getopt
来更新,它遇到带参数的选项。
答案 1 :(得分:1)
optarg
指向getopt()扫描的当前选项。如果你想要指向命令行上传递的每个参数的指针,那么你可以将它们存储在由optarg
给出的指针数组中。
这是一个最小的工作示例:
的#include #include
int main (int argc, char **argv)
{
char *p = 0;
char *arr[5] = {0};
int i;
int c;
while ((c = getopt (argc, argv, "A:B:C:")) != -1)
switch (c)
{
case 'A':
arr[0] = optarg;
break;
case 'B':
arr[1] = optarg;
break;
case 'C':
arr[2] = optarg;
break;
default:
printf("Invalid option %c\n", c);
}
printf("A:%s B:%s C:%s", arr[0], arr[1], arr[2]);
return 0;
}
当然,如果未提供一个或多个选项,则应添加更多错误检查。