C通过‘的参数2的警告;getopt’;来自不兼容的指针类型
我使用C通过‘的参数2的警告;getopt’;来自不兼容的指针类型,c,C,我使用getopt()编写一个函数,从命令行获取选项。当我编译它时,我得到以下警告: cc1: warnings being treated as errors csim.c: In function ‘getArg’: csim.c:157: error: passing argument 2 of ‘getopt’ from incompatible pointer type /usr/include/getopt.h:152: note: expected ‘char * const*’
getopt()
编写一个函数,从命令行获取选项。当我编译它时,我得到以下警告:
cc1: warnings being treated as errors
csim.c: In function ‘getArg’:
csim.c:157: error: passing argument 2 of ‘getopt’ from incompatible
pointer type /usr/include/getopt.h:152: note: expected ‘char * const*’
but argument is of type ‘const char **’
下面是C代码:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(){
}
int getArg(int argc, char const *argv[], int *verbose, int *ps,
int *pE, int *pb, char *traceFileName){
int arg;
int argCount;
while ((arg = getopt(argc, argv, "vs:E:b:t:")) != -1){
switch (arg){
case 'v':
*verbose = 1;
break;
default:
printf("%s\n", "Illegal command arguments, please input again");
exit(-1);
break;
}
}
if(argCount < 4){
printf("%s\n", "Illegal command arguments, please input again");
exit(-1);
}
return 0;
}
#包括
#包括
#包括
#包括
int main(){
}
int getArg(int argc,char const*argv[],int*verbose,int*ps,
int*pE,int*pb,char*traceFileName){
int-arg;
int argCount;
while((arg=getopt(argc,argv,“vs:E:b:t:”)!=-1){
开关(arg){
案例“v”:
*详细=1;
打破
违约:
printf(“%s\n”,“命令参数非法,请重新输入”);
出口(-1);
打破
}
}
如果(argCount<4){
printf(“%s\n”,“命令参数非法,请重新输入”);
出口(-1);
}
返回0;
}
这是函数声明argv的方式。你改变了康斯特内斯。错误消息告诉您出了什么问题 问题是,正如错误所说,您正在传递一个const char**
,其中需要一个char*const*
。具体来说,您正在将argv
(类型错误)传递给getopt。您可以通过更改argv
的类型来解决此问题
int getArg(int argc, char * const argv[], int *verbose, int *ps, int *pE, int *pb, char *traceFileName)
谢谢davmac!我在一些代码中看到main()函数类似于main(int argc,char*argv)。那么,char*const argv[]、char-const argv[]和char**argv有什么区别呢?
char*const argv[]
是一个由char*
值组成的不可修改数组。它可以转换为指针(特别是char*const*
,即指向不可修改的char*
值的指针)char const argv[]
将是一个不可修改的字符值数组char**argv
是指向char指针的指针;可以将其视为char*
的数组。