例如,
我有如下结构选项:
struct option options[] = {
{"input", required_argument, NULL, OPT_INPUT},
{"flag", no_argument, NULL, OPT_FLAG},
现在,如果程序的用户在 -input 命令后错误地省略了输入文件名,则传递标志,如下所示:
./program -input -flag
getopt_long_only 将“-flag”视为输入的参数,因此将其作为程序中的输入文件,而不是下一个参数(因此在 -input 之后没有传递任何参数时返回错误)。如何避免这种情况?
我正在使用 GUN/LINUX (2.6.34.3) 和 gcc (GCC) 4.4.2 20091027 (Red Hat 4.4.2-7)。
最佳答案
我认为最简单的方法是在读入所有内容后简单地检查传递给 -input 的参数是否不等于 -flag。例如,如果您要将所需的输入参数存储在 char *temp
,只需检查 strcmp(temp, "-flag")
是否为非零。如果它为零(即,他们输入了 ./program -input -flag
),则打印一条错误消息并退出。
关于c - getopt_long_only : how to prevent the next option as being taken as argument for the previous option with "required_argument" flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016990/