gpt4 book ai didi

c++ - 玩转 getopt

转载 作者:太空宇宙 更新时间:2023-11-04 14:29:16 27 4
gpt4 key购买 nike

您好,我是编码新手,正在尝试找出此 getopt 不起作用的原因。我的编译器提示“i:o:”

错误 C2664“int getopt(int,char **,char *)”:无法将参数 3 从“const char [5]”转换为“char *”

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;
}

这很奇怪,因为当我阅读有关 getopt 的内容时,我看到了这个“选项参数是一个字符串,它指定了对该程序有效的选项字符。”

最佳答案

根据您的错误消息,getopt 函数需要一个可写 选项字符串。您可以像这样创建一个非常量字符数组来做到这一点:

int main(int argc, char *argv[])
{
// non-const char array
char opts[] = "i:o:"; // copy a string literal in

int opt;
while ((opt = getopt(argc, argv, opts)) != -1)
{
switch (opt)
{
case 'i':
printf("Input file: \"%s\"\n", optarg);
break;
case 'o':
printf("Output file: \"%s\"\n", optarg);
break;
}
}
return 0;
}

您的原始代码在 LinuxGCC v7 上对我来说工作正常。您使用的版本的函数签名似乎不同。

我的系统上是:

int getopt (int argc, char** argv, const char* options);

但在您的系统上它似乎是:

int getopt(int,char **,char *);

最后一个参数缺少 const 会导致错误,这就是为什么您需要给它一个非 const 字符串。

注意:我不建议为此使用 const_cast,因为有些人可能会受到诱惑。您永远不知道该功能是如何实现的,或者该内部实现是否会在某个时候发生变化。

关于c++ - 玩转 getopt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49759879/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com