刚开始学 请问这个怎么解决呢 重启过电脑和软件都没有用 点击运行后就会跳出来这个
文件名改成英文即可
解决你的问题,请点赞采纳,谢谢
【相关推荐】
为了应对前面说的这种情况,需要用到下面两个函数中的一个:
#include<getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
它们的第一个第二个参数和getopt一样,第三个参数是一个struct option指针:
struct option {
const char *name;
int has_arg;
int *flag;
int val;
};
其成员含义分别如下:
longindex表示长选项在longopts中的索引值。
那getopt_long和getopt_long_only有什么区别呢?
实际上主要功能是差不多的,只是前者一个-时被解析成短选项,–被解析成长选项,而后者都被解析为长选项,举个例子,-help在前者被解析为h,e,l,p四个选项,而在后者是和–help一样的效果,即被认为是长选项。在getopt_long_only中,optstring可以为“”。
我们来看一个示例程序:
//来源:公众号【编程珠玑】
//博客:https://www.yanbinghu.com
//main2.c
#include<stdio.h>
#include<getopt.h>
extern int optind,opterr,optopt;
extern char *optargi;
//定义长选项
static struct option long_options[] =
{
{"help",no_argument,NULL,'h'},
{"verbose",no_argument,NULL,'v'},
{"number",required_argument,NULL,'n'}
};
int main(int argc,char *argv[])
{
int index = 0;
int c = 0; //用于接收选项
/*循环处理参数*/
while(EOF != (c = getopt_long(argc,argv,"hvn:",long_options,&index)))
{
switch(c)
{
case 'h':
printf("we get option -h,index %d\n",index);
break;
case 'v':
printf("we get option -v,index %d\n",index);
break;
//-n选项必须要参数
case 'n':
printf("we get option -n,para is %s\n",optarg);
break;
//表示选项不支持
case '?':
printf("unknow option:%c\n",optopt);
break;
default:
break;
}
}
return 0;
}
编译运行:
$ gcc -o main2 main2.c
$ ./main2 --verbose --help
we get option -v,index 1
we get option -h,index 0
注意,为什么-v参数的index是0?因为只有长选项才会对应index。
可以看到,使用–跟长选项,单个-后面跟短选项,但是如果是下面这样呢?
$ ./main2 -help
we get option -h,index 0
./main2: invalid option -- 'e'
unknow option:e
./main2: invalid option -- 'l'
unknow option:l
./main2: invalid option -- 'p'
unknow option:p
在这里,由于使用的getopt_long,它对于单个-的字符串,里面每个字符都当成了一个选项,因此help对它来说,其实是四个选项,但是后三个不被识别。如果想要-help也被当成长选项,那么就需要用到getopt_long_only函数了。
最后,再完整的用一遍:
$ ./main2 --help --verbose --number 10
we get option -h,index 0
we get option -v,index 1
we get option -n,para is 10