【问题标题】:The variable optarg of the function getopt()函数 getopt() 的变量 optarg
【发布时间】:2016-10-26 05:05:07
【问题描述】:

我已经阅读了documentation for the function getopt(),但我没有找到清楚的解释,尤其是关于变量optarg。我找不到任何其他可以明确和清楚地解释有关optarg 的一般信息的来源。我的问题如下:

  • 什么是optarg
  • optarg 如何获得它的价值?
  • 文档中提到了一些关于冒号更改optarg 值的内容;这是如何工作的?

文档中有如何使用optarg 的示例,但我更感兴趣的是对变量本身进行清晰而详尽的解释。

【问题讨论】:

  • 回到那个手册页,阅读上面写着 "optstring 是一个包含合法选项字符的字符串。如果这样的字符后跟一个冒号,则该选项需要一个参数,所以getopt() 将指向同一 argv 元素中以下文本的指针,或 optarg 中以下 argv 元素的文本。" -- 然后一遍又一遍地读取它,直到它沉入。跨度>
  • 无意冒犯,是你昨天才问了类似的问题吗?
  • @SouravGhosh 是的。
  • 好的,这次我没有写更长的评论,而是编译了一个实际的答案。看看有没有帮助。

标签: c getopt


【解决方案1】:

man page 说,(强调我的

optstring 是一个包含合法选项字符的字符串。如果这样的字符后跟一个冒号,则该选项需要一个参数,因此getopt() 指向同一 argv 元素中的以下文本的指针,或 @987654323 中的以下 argv 元素的文本@。两个冒号表示一个选项带有一个可选参数;如果当前 argv 元素中有文本(即与选项名称本身在同一个词中,例如“-oarg”),则在 optarg 中返回,否则 optarg 设置为零。 [...]

下面给出的代码 sn-p 显示了用法。

while ((opt = getopt(argc, argv, "nt:")) != -1) {
    switch (opt) {
    case 'n':
        flags = 1;
        break;
    case 't':
        nsecs = atoi(optarg);
        tfnd = 1;
        break;
    default: /* '?' */
        fprintf(stderr, "Usage: %s [-t nsecs] [-n] name\n",
                argv[0]);
        exit(EXIT_FAILURE);
    }
}

详细来说,通过查看"nt:" 的语法,我们可以理解选项n 不需要任何参数,但选项t 将有以下参数。所以,当找到t这个选项时,对应的参数就存入optarg,可以通过访问optarg来检索。

因此,基本上,getopt() 将返回 选项optarg 将返回该选项的提供的参数(如果有)。

如果二进制文件像./a.out -t 30 一样运行,那么当getopt() 返回t 时,optarg 将持有一个指向包含30字符串 的指针(不是@ 987654338@,请注意)。

【讨论】:

  • 我明白了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多