gpt4 book ai didi

c - getopt() 函数 - optind 没有按预期递增/表现

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:28 24 4
gpt4 key购买 nike

根据我将选项传递给该程序的格式,变量 optind 将正确递增以反射(reflect)下一个选项值,否则不会递增。

如果我使用 ./cfind -aru,我会得到以下(奇怪的)输出。

optind: 1
aflag detected
optind: 1
optind: 1
rflag detected
optind: 1
optind: 2
uflag detected
optind: 2

请注意,optind 不会从 aflag 递增到 rflag,但会从 rflag 递增到 uflag。

但是,当我使用格式 ./cfind -a -r -u 时,我得到以下(预期的)输出。

optind: 2
aflag detected
optind: 2
optind: 3
rflag detected
optind: 3
optind: 4
uflag detected
optind: 4

这是我想要的输出。

我的这个功能的代码如下。

#include "cfind.h"
#define OPTLIST "acdirstu" // list of valid options

void ProcOpt(int argc, char *argv[]) {
int opt = 0; // default value
opterr = 0; // prevent getopt from passing error message to stderr buffer
// char *filenm = NULL; // pointer to the path name
while((opt = getopt(argc, argv, OPTLIST)) != -1) {
switch (opt) {
case 'a':
fprintf(stdout, "optind: %i\n", optind);
aflag = true;
assert(aflag == true);
fprintf(stdout, "aflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 'c':
fprintf(stdout, "optind: %i\n", optind);
cflag = true;
assert(cflag == true);
fprintf(stdout, "cflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 'd':
fprintf(stdout, "optind: %i\n", optind);
dflag = true;
assert(cflag == true);
fprintf(stdout, "dflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 'i':
fprintf(stdout, "optind: %i\n", optind);
iflag = true;
assert(iflag == true);
fprintf(stdout, "iflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 'r':
fprintf(stdout, "optind: %i\n", optind);
rflag = true;
assert(rflag == true);
fprintf(stdout, "rflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 's':
fprintf(stdout, "optind: %i\n", optind);
sflag = true;
assert(sflag == true);
fprintf(stdout, "sflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 't':
fprintf(stdout, "optind: %i\n", optind);
tflag = true;
assert(tflag == true);
fprintf(stdout, "tflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
case 'u':
fprintf(stdout, "optind: %i\n", optind);
uflag = true;
assert(uflag == true);
fprintf(stdout, "uflag detected\n");
fprintf(stdout, "optind: %i\n", optind);
break;
default:
usage();
}
}
}

我做错了什么吗?我对 getopt() 以及它如何递增 optind 有什么误解吗?

谢谢。

最佳答案

getopt手册页说(强调我的):

The variable optind is the index of the next element to be processed in argv.

您的调用选项 -aru 都作为单个字符串包含在 argv[1] 中。

关于c - getopt() 函数 - optind 没有按预期递增/表现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com