C 中带有 char*const* 指针的函数 getopt
Function getopt in C with char*const* pointer
我想使第三个参数成为可能,如下所示:
(任意位置的文件名)
program -a 3 <filename> -b 6
program -a 3 -b 6 <filename>
如何使用 getopt
执行此操作并将此字符串保存在变量 file
中?
int main(int argc, char *const *argv) {
int a = 0; int b = 0; int i = 0;
char *A; char *B;
char *file = NULL;
int c;opterr = 0;
while ((c = getopt (argc, argv, "a:b:")) != -1) {
switch (c) {
case 'a': a = 1; A = optarg; break;
case 'b': b = 1; B = optarg; break;
case '?':
if (optopt == 'c') fprintf (stderr, "Option -%c requires an argument.", optopt);
else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.", optopt);
else fprintf (stderr,"Unknown option character `\x%x'.",optopt);
default: file = optarg; break; }}
strcpy(&file,*(argv + i));
return 0;
}
getopt
函数要求所有参数都在所有非参数之前。因此 getopt
无法处理 program -a 3 <filename> -b 6
。文件名必须在末尾,或者必须有与之关联的选项字母。
关于读取文件名,您可以在 getopt 循环之后进行。 optind
变量包含下一个尚未处理的参数的索引,因此可以从 argc
中减去此值并将其添加到 argv
以处理从 0.[=17 开始的剩余参数=]
argc -= optind;
argv += optind;
file = argv[0];
我想使第三个参数成为可能,如下所示: (任意位置的文件名)
program -a 3 <filename> -b 6
program -a 3 -b 6 <filename>
如何使用 getopt
执行此操作并将此字符串保存在变量 file
中?
int main(int argc, char *const *argv) {
int a = 0; int b = 0; int i = 0;
char *A; char *B;
char *file = NULL;
int c;opterr = 0;
while ((c = getopt (argc, argv, "a:b:")) != -1) {
switch (c) {
case 'a': a = 1; A = optarg; break;
case 'b': b = 1; B = optarg; break;
case '?':
if (optopt == 'c') fprintf (stderr, "Option -%c requires an argument.", optopt);
else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.", optopt);
else fprintf (stderr,"Unknown option character `\x%x'.",optopt);
default: file = optarg; break; }}
strcpy(&file,*(argv + i));
return 0;
}
getopt
函数要求所有参数都在所有非参数之前。因此 getopt
无法处理 program -a 3 <filename> -b 6
。文件名必须在末尾,或者必须有与之关联的选项字母。
关于读取文件名,您可以在 getopt 循环之后进行。 optind
变量包含下一个尚未处理的参数的索引,因此可以从 argc
中减去此值并将其添加到 argv
以处理从 0.[=17 开始的剩余参数=]
argc -= optind;
argv += optind;
file = argv[0];