比方追查

我的问题是基于前一个问题的询问ç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()开始while语句在main()

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

用什么数据结构?

回答:

我所建议的解决方案是将文件名传递给数组。该解决方案假设最大文件数为10,最大文件名长度为30.但是在类似的说明中,我们可以提供允许任意数量文件动态分配的机会。

#include <stdio.h> 

#include <unistd.h>

#include <string.h>

#define MAXLEN 30

#define MAXFILECOUNT 10

void print(int fileCount, char files[][MAXLEN+1]){

for(int i = 0; i < fileCount; i++){

printf("%s \n",files[i]);

}

}

int main(int argc, char **argv)

{

int opt;

char fileName[MAXFILECOUNT][MAXLEN+1];

int count = 0;

while ((opt = getopt(argc, argv, "i:")) != -1)

{

switch (opt)

{

case 'i':

snprintf(fileName[count++],MAXLEN,"%s",optarg);

break;

}

}

print(count,fileName);

return 0;

}


调用的程序一样

./a.out -i file1 -i file2 

以上是 比方追查 的全部内容, 来源链接: utcz.com/qa/257356.html

回到顶部