C 可选的getopt函数
我很难选择getopt操作。这是我代码的一部分。它接受一个参数文件,如果参数文件存在,则计算字符数。如果不是,则统计标准输入字符 我的问题是,一旦optarg未声明,它将设置为什么?我该如何让我的选项-c成为可选选项,并使其起作用 目前它总是从stdin读取C 可选的getopt函数,c,getopt,C,Getopt,我很难选择getopt操作。这是我代码的一部分。它接受一个参数文件,如果参数文件存在,则计算字符数。如果不是,则统计标准输入字符 我的问题是,一旦optarg未声明,它将设置为什么?我该如何让我的选项-c成为可选选项,并使其起作用 目前它总是从stdin读取 while( (option = getopt(argc, argv, "c::") ) != -1 ) { switch(option) { case 'c': if (optarg == NULL) {
while( (option = getopt(argc, argv, "c::") ) != -1 ) {
switch(option) {
case 'c':
if (optarg == NULL) {
file = stdin;
}
else {
file = fopen(optarg, "r");
}
while( (ch = fgetc(file)) != EOF ) {
count++;
}
printf("%d %s\n", count, optarg);
fclose(file);
break;
“标准”(POSIX)不支持选项的可选参数。双冒号的使用是一种扩展 要使
getopt()
将optarg
设置为选项的“可选”参数,请在调用程序时使用如下选项:
program -coptional_argument_to_option_c
不过,您也可以选择以下方法之一:
- 定义
,文件名为必填项。如果-c文件名
未命中,只需计算从-c filename
读取的内容stdin
- 或者定义
,不带任何参数来告诉您的程序要做什么(在这里计数),并另外定义一个选项来告诉您的程序从哪里读取,如-c
。如果后者未从-f filename
读取stdin
两个冒号表示一个选项包含一个可选参数;如果当前argv元素中有文本(即,与选项名称本身相同的单词,例如“-oarg”),则返回optarg,否则optarg设置为零 这一页解释得稍微好一点: 最后,如果optstring中的选项字母后跟两个冒号字符,则允许该选项具有可选选项参数。(说快三倍!)如果此类参数与选项位于同一argv元素中,则视为存在,否则不存在。如果不存在,GNU getopt()将返回选项字母并将optarg设置为NULL。例如,给定-
while((c=getopt(argc,argv,“ab:”)!=1)
...
-对于-bYANKEES,返回值为“b”,optarg指向“YANKEES”,而对于-b或“-b YANKEES”,返回值仍然为“b”,但optarg设置为NULL。在后一种情况下,“YANKEES”是一个单独的命令行参数
检查这是否也适用于您。一旦未声明,optarg将设置为什么???你再清楚不过了。为什么
::
,而不是:
?“两个冒号表示一个选项包含可选参数”-LinuxManual抱歉,我不清楚。我正在澄清当选项-c变为可选时,optarg是否设置为NULL。我想这可能就是为什么这是错误的,因为当我打印optarg时,它给出了一个Seg错误,我不知道这个GNU扩展。请查看我的更新答案。当filename参数是必需的(c:)时,getopt()会自动指示该选项需要参数。那么我应该把条件语句放在哪里?@Sarc:哪个“条件语句”?谢谢,我已经完成了第一个选项。谢谢,这个简短的选项语法相当神秘。