gpt4 book ai didi

C 将文件参数与 GetOpt 一起使用

转载 作者:行者123 更新时间:2023-11-30 14:55:06 28 4
gpt4 key购买 nike

是否有比仅循环 argv[] 查找不是标志的参数更好的方法来查找文件名 - ?

在这种情况下,可以按任何顺序输入标志(因此 optind 不会有帮助)。

即:

/program -p 文件.txt -s

/program -p -s 文件.txt -b

/程序文件.txt -p -s -a

int main (int argc, char *argv[]){


char option;
const char *optstring;
optstring = "rs:pih";


while ((option = getopt(argc, argv, optstring)) != EOF) {

switch (option) {
case 'r':
//do something
break;
case 's':
//etc etc
}
}

最佳答案

来自 getopt() 的手册页,

By default, getopt() permutes the contents of argv as it scans, so that eventually all the nonoptions are at the end.

因此选项和非选项参数的给出顺序并不重要。

使用getopt()来处理选项及其参数(如果有)。之后,检查optind的值。

正如手册页所说,

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

在你的命令中,似乎只有一个非选项参数。如果在正确处理所有选项后出现这种情况,optind 必须等于 argc-1

此外,在您给出的optstring中,s后面有冒号。这意味着如果选项 -s 存在,它必须有一个参数。

while ((option = getopt(argc, argv, optstring)) != EOF) {
switch (option) {
case 'r':
//do something
break;
case 's':
//etc etc
}
}

//Now get the non-option argument
if(optind != argc-1)
{
fprintf(stderr, "Invalid number of arguments.");
return 1;
}
fprintf(stdout, "\nNon-option argument: %s", argv[optind]);

注意:选项可以按任何顺序提供,但一个选项的参数不能作为另一个选项的参数给出。

关于C 将文件参数与 GetOpt 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46210580/

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