Tag: getopt

我能得到的最简单的getopt程序?

在关于如何使用getopt() 链接上做了一些阅读之后,我试图得到一个小例子。 我想要的是: ./prog -v # show me prog version ./prog -f filename # just show me the filename I entered from the command line 这是我到目前为止写的: #include #include #include int main(int argc, *argv[]) { char VER[] = “0.1.1”; int opt; opt = getopt(argc, argv, “vf:”); char *filename; while (opt != -1) { switch(opt) { case […]

我能正确理解getopt()吗?

我正在尝试扫描命令行中的某些字母,符号和值。 我想扫描”-w” ,一个数字和”-s” 。 我在上一个问题中得到了回复,我被告知要使用getopt() ,经过一段谷歌搜索,我想我可能会得到它,但我不确定。 这就是我认为我在做的事情: int c = 0; int b = argv[2]; while((c = getopt(argc, argv, “-w”, “-s”, b)) 我想我正在扫描argc中的”-w” , “-s”和argv[2]值(这是数字)。 但我不知道我是否正确使用它?

getopterror handling多个逗号分隔值

如何为从getopt的命令行接收的逗号分隔值的多个组合validation字符串变量? case ‘a’ : flaga=1; alg = optarg; printf(“you entered option -a \”%s\”\n”, optarg); if(strcmp(alg,”lr”) == 0 ) { ….//valid } else if(strcmp(alg,”lda”) == 0 ) { ….//valid } else if(strcmp(alg,”knn”) == 0 ) { …//valid } “”””” “””” else { printf(“wrong value entered for option -a \n”); exit(); } 选项-a可以接受这些值:“knn”,“lda”,“lr”,“kart”,“nb”,“svm”。 如果用户仅传递单个值,则上述代码可以完美地处理错误。 但是选项-a可以接受多个值,以逗号分隔, Eg : […]

选项后跟getopt中的一个选项

我有一个疑问,如果我们有两个选项-a和-c和选项-a需要有一个值而没有-c的值 现在,如果我给 – > testopt -a -c [testopt是程序] 然后我的程序将-c作为-a的值。 有没有办法,我可以确保有价值的选项没有其他选项作为其值? 问题是系统接受 – 一个关键字的值作为我需要防止的另一个关键字。 例如 – testopt -a -c。 在这种情况下,-a的强制参数(值)和-c的值没有…但是我的getopt将其解释为“-c”是“-a”的值我怎么能在这个上抛出一个错误getopt的。

在C中的参数之前和之后处理命令行选项

到目前为止,我一直在使用getopt_long来解析命令行C程序的选项。 有没有办法在遇到非选项参数时停止getopt_long解析? 如果没有,在C中处理这个问题的最佳方法是什么? 举个例子,我想以类似于git的方式处理命令,并且在命令之前有一般参数,在它之后有特定于命令的参数: git [general options] [command options] 例如: git –bare commit -a git -p –bare status -s -p和–bare是常规选项,可以与所有命令一起使用,而-a特定于commit命令, -s特定于status命令。 使用getopt_long将首先尝试解析所有选项,然后保留要处理的非选项参数。 理想情况下,一旦我点击非选项(即命令),就会停止解析,然后将剩余的参数传递给特定于命令的选项解析器。

Getopt转移optarg

我需要像这样调用我的程序: ./program hello -r foo bar 我从argv [1]中打招呼,但我在价值栏上遇到麻烦,我也应该将“r:”更改为其他内容吗? while((c = getopt(argc, argv, “r:”)) != -1){ switch(i){ … case ‘r’: var_foo = optarg; //shell like argument shift here? var_bar = optarg; break; …} 我知道我可以通过argv来做到这一点,但有没有办法用getopt与bash类似的方式做到这一点? 谢谢。

argp和getopt有什么区别?

我认为标题是自我解释的。 我正在制作一个节目,我想知道我应该使用哪两个以及为什么。

getopt switch语句永远不会遇到默认情况

我试过搜索,但没有找到重复/类似的问题。 为什么“默认”在这种情况下永远不会触发? 为一个课程做一些以前的家庭作业,为秋天做准备,我在C中遇到了getopt()的问题。 以下是有问题的特定行: while ((c = getopt(argc, argv, “i:o:”)) != -1) { switch (c) { case ‘i’: inFile = strdup(optarg); break; case ‘o’: outFile = strdup(optarg); break; default: usage(); //this prints the “usage” statement and exits cleanly. } } 我的问题是,怎么称呼 ./fastsort abcd 不打印使用并退出?

Getopt可选参数?

我有一个程序,你输入一个选项-d然后是否在选项后提供一个非可选参数,做一些事情。 inheritance我的代码: #include #include #include #define OPT_LIST “d::” int main (int argc, char *argv[]) { int c; char string[] = “blah”; while ((c = getopt (argc, argv, OPT_LIST)) != -1) { switch (c) { case ‘d’: printf(“%s\n”, optarg); break; case ‘?’: fprintf(stderr, “invalid option\n”); exit(EXIT_FAILURE); } } } 因此,如果在选项后输入非可选参数,则会打印参数。 但是如果用户没有提供非可选参数,我希望它打印出char“string”(这就是为什么我把双冒号放在OPT_LIST中)。 但我不知道如何做到这一点,所以任何帮助将不胜感激。 下面是我运行程序时会发生什么: user:desktop shaun$ ./arg […]

‘main’通常是一个非静态函数ERROR

有两个错误出现:main.c:80:警告:’main’通常是一个非静态函数main.c:88:错误:输入结束时的预期声明或语句我似乎无法找到问题……花括号的数量相等……似乎有什么问题? #include #include #include #include #include #include “main-getopt.h” void print_usage_and_abort( const char *message ) { if( NULL != message ) fprintf( stderr, “Error: %s\n”, message ); fprintf( stderr, “Usage: partitioner -n [ -f ]\n\n” ); exit( -1 ); } void parsing (int argc, char **argv, struct Params *params) { char error_message[256]; params->nodes = 0; memcpy( […]