我正在尝试分析作为输入的文本,该文本将根据输入到命令提示符下的参数及其值(以./a.out -a -b 20 -c 3
的形式)以任意顺序进行修改和打印,并且它们是可选的,并且不完全不需要输入。如何将这些参数实现到C代码中,以及如何找出它们具有的值?
(为了便于说明,可以使用前面提到的-a,-b和-c。)
谢谢。
答案 0 :(得分:1)
(我不想为此投票,感谢@SteveFriedl。)
由于我从未听说过getopt()
,并且为编写这种事情而感到内,请参见下面的示例。
请注意,getopt
似乎只接受单字符参数名称。例如,您可以使用-f hello.text
,但不能使用-filename hello.txt
。 optind
和optarg
是unistd.h
中声明的(ugh)全局变量。
(请注意,通过逐步完成argv[]
自己实现这一点并不困难,这可能会产生更灵活的解决方案。)
Shamelessly lifted from Geeks for Geeks:
// copied from https://www.geeksforgeeks.org/getopt-function-in-c-to-parse-command-line-arguments/
// Program to illustrate the getopt()
// function in C
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
int opt;
// put ':' in the starting of the
// string so that program can
//distinguish between '?' and ':'
while((opt = getopt(argc, argv, “:if:lrx”)) != -1)
{
switch(opt)
{
case ‘i’:
case ‘l’:
case ‘r’:
printf(“option: %c\n”, opt);
break;
case ‘f’:
printf(“filename: %s\n”, optarg);
break;
case ‘:’:
printf(“option needs a value\n”);
break;
case ‘?’:
printf(“unknown option: %c\n”, optopt);
break;
}
}
// optind is for the extra arguments
// which are not parsed
for(; optind < argc; optind++){
printf(“extra arguments: %s\n”, argv[optind]);
}
return 0;
}
然后
./a.out -i -f file.txt -lr -x 'hero'
产生
option: i
filename: file.txt
option: l
option: r
unknown option: x
extra arguments: hero
答案 1 :(得分:1)
通常,您这样声明您的主要功能
int main( int argc, char *argv[] ) {}
然后,当您从命令行调用程序时,
./a.out 1 2 3
argc
将是一个包含4(传递的参数数量)的整数
,在argv[1]
至argv[3]
中,您分别具有指向参数1至3的指针。而在argv[0]
中,您有一个指向程序名称的指针。