gpt4 book ai didi

c - C getopt 和 getopt_long 是否仅适用于主要参数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:33 25 4
gpt4 key购买 nike

问题很清楚,我想知道,因为那个人说

The getopt() function parses the command-line arguments.

我正在尝试将它与另一个与 main 具有相同签名的函数一起使用,并且 argcargv 是通过 wordexp 所以一切看起来都一样,但是在调用 getopt 时,我在调用 getopt_long 后立即遇到段错误。

#define   OPT_HELP    'h'
#define OPTL_HELP "help"
#define OPT_MESS 'm'
#define OPTL_MESS "message"

#define OPT_STRING "hm:"

struct option longopts[] = {
{OPTL_HELP, no_argument, 0, OPT_HELP},
{OPTL_MESS, required_argument, 0, OPT_MESS},
{0, 0, 0, 0}
};

#define FLAG_MESS 1

void cmd_chat(int argc, char **argv)
{
int c, indexptr;
short flag = 0;
char message[481];
while ((c = getopt_long(argc, argv, OPT_STRING,
longopts, &indexptr)) != -1) {
debug(MAGENTA "cmd_chat", MAGENTA "c value: %d", c);
switch (c) {
case OPT_HELP:
debug(MAGENTA "cmd_chat", MAGENTA "calling help");
help(argv[0]);
return;
break;
case OPT_MESS:
flag |= FLAG_MESS;
strncpy(message, optarg, 481);
break;
default:
usage(argv[0]);
break;
}
}


[...]

可能是这样,但如果是这样,我想知道为什么会这样,为什么我们应该将 argcargv 传递给 getopt (_long).

谢谢。

最佳答案

getopt()getopt_long() 都适用于每个适当的 char **intargv 和任何其他 char ** 之间没有区别。如果您将 argvargc 或它们的副本从 main 传递到您的函数并从那里调用 getopt(),它将起作用。展示你的函数如何得到 argcargv;

关于c - C getopt 和 getopt_long 是否仅适用于主要参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755103/

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