问题描述
我有一个计划,需要在多个命令行参数,所以我使用getopt的。我的一个参数接受一个字符串作为参数。反正是有通过getopt函数来获取字符串或我将不得不通过的argv []数组获得它?也可以getopt说明读起来像 -file
ARGS?我已经看到到现在的所有参数都只有一个字符,如 -a
修改
从下面的答案,我写了一个程序来使用getopt_long(),但是switch语句只承认当我使用的字符参数,而不是长期争论的论点。我不知道为什么这种情况发生。在传递的参数 -mf -file样品
我没有看到打印报表。
修改
我试着输入命令参数为 - 文件
,然后它的工作。它是不可能有这样做只是 -file
?
静态结构选项long_options [] =
{
{MF,required_argument,NULL,A},
{MD,required_argument,NULL,B},
{百万,required_argument,NULL,C},
{MW,required_argument,NULL,D},
{LF,required_argument,NULL,'E'},
{LD,required_argument,NULL,F},
{LN,required_argument,NULL,'G'},
{LW,required_argument,NULL,H},
{RF,required_argument,NULL,'我'},
{RD,required_argument,NULL,J},
{RN,required_argument,NULL,'K'},
{RW,required_argument,NULL,L},
{DF,required_argument,NULL,M},
{DD,required_argument,NULL,'N'},
{DN,required_argument,NULL,'O'},
{DW,required_argument,NULL,P},
{文件,required_argument,NULL,Q},
{NULL,0,NULL,0}
};
INT CH = 0;
而((CH = getopt_long(ARGC,ARGV,abcdefghijklmnopq:long_options,NULL))!= -1)
{
//检查,看看是否有单个字符或长选项来通过
开关(CH){
案一:
COUT<<称号;
打破;
案例'B': 打破;
情况下C: 打破;
案D: 打破;
案例E: 打破;
案例'F': 打破;
案例'G': 打破;
案例'H': 打破;
案例'我': 打破;
案例'J': 打破;
案例'K': 打破;
案例'L': 打破;
案件的m: 打破;
案例'N': 打破;
案例'O': 打破;
案例'P': 打破;
案例'Q':
COUT<<文件;
打破;
案件 '?':
COUT<<错误消息
打破;
}
}
读男人的getopt
的
A sample code:
#include <stdio.h>
#include <unistd.h>
int main (int argc, char *argv[])
{
int opt;
while ((opt = getopt (argc, argv, "i:o:")) != -1)
{
switch (opt)
{
case 'i':
printf ("Input file: \"%s\"\n", optarg);
break;
case 'o':
printf ("Output file: \"%s\"\n", optarg);
break;
}
}
return 0;
}
Here in the optstring
is "i:o:" the colon ':' character after each character in the string tells that those options will require an argument. You can find argument as a string in the optarg
global var. See manual for detail and more examples.
For more than one character option switches, see the long options getopt_long
. Check the manual for examples.
EDIT in response to the single '-' long options:
From the man pages
Check the manual and try it.
这篇关于为了论证Getopt-传递字符串参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!