【发布时间】:2017-12-02 16:45:05
【问题描述】:
我的问题基于上一个问题,询问 C optget 如何处理多个值:C getopt multiple value
就我而言,我只有一个参数-i,这是可选的。用户必须使用此语法:
/a.out -i file1 -i file2 -i file3
如果用户不提供-i 标志,程序运行正常。用户可以提供无限数量的文件作为可选参数,例如
/a.out -i file1 -i file2 -i file3 -i file4 -i file5 ...
我从getopt()main() 中的这个 getopt()while 语句开始:
char *input; // ?? Now syntactically correct, but uninitialized?
while ((opt = getopt(argc, argv, "i:"))!= -1){
case 'i':
if (optarg == NULL){
input = NULL;
}
else{
strcpy(input, optarg);
break;
...
}
然后我会将这些可选参数传递给函数:
function1(char *required_arg, ...)
在上述情况下,它将是:
function1(required_arg, file1, file2, file3, file4, file5)
目前,我将input 定义为“文件”。我的问题是,我如何跟踪任意数量的可选参数以便以后传递给函数?上面的代码是错误的,因为我正在为每个传递的-i 参数重新定义input。
人们使用什么数据结构?
【问题讨论】:
-
你可以传递一个参数数组(你可以将它们存储在一个数组中)
-
@coderredoc 我如何计算通过
i传递的参数的长度?也就是上面有5个文件 -
如果我错了,请纠正我 - 您想获取从选项
-i file1 -i file2获得的文件的名称,然后您想将它们传递给其他方法。现在您的问题是如何将它们传递给其他方法? -
@coderredoc 是的。也许我误解了
optget()上面的工作原理,但我认为我需要保存每个字符串(例如通过附加到数组),然后遍历这个数组,将字符串输入function1。 -
可能还有其他方法 - 但将其存储在数组中就是其中之一。同样,如果您将它存储在一个数组中 - 为什么不能将整个数组传递给方法
function1?现在,如果该方法一次只接受一个字符串 - 那么当您在while循环中一一获取选项时,为什么不能一一传递参数?