从unix命令行运行时,getopt无法正常工作

ste*_*evo 0 c unix linux getopt command-line-arguments

我写了(从谷歌复制并粘贴并简化)一个C程序,使用getopt打印出从Unix命令行传入的参数值.

从Unix命令行:

./myprog -a 0 -b 1 -c 2
Run Code Online (Sandbox Code Playgroud)

我的C代码是:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int i;

    while ((i = getopt(argc, argv, "abc")) != -1) {
        switch (i) {
            case 'a': 
               printf("A = %s\n", optarg);
               break;

            case 'b': 
               printf("B = %s\n", optarg);
               break;

            case 'c': 
               printf("C = %s\n", optarg);
               break;

            default:
                break;
        }
    }

    return 0;
}    
Run Code Online (Sandbox Code Playgroud)

我想编程打印出传递的每个值,例如

A = 0
B = 1
C = 2
Run Code Online (Sandbox Code Playgroud)

但它根本不打印任何东西.

Edd*_*_Em 6

在任何带参数的选项之后你忘了":".如果你改变一行

while ((i = getopt(argc, argv, "a:b:c:")) != -1) {
Run Code Online (Sandbox Code Playgroud)

你将得到工作变体.

正确读取man 3 getopt,它说,大约三分之一的说法getopt

... optstring是一个包含合法选项字符的字符串.如果这样的字符后跟冒号,则该选项需要一个参数,因此getopt()在optarg中的同一个argv-element或以下argv-element的文本中放置一个指向以下文本的指针.两个冒号意味着一个选项需要一个可选的arg; 如果当前argv-element中有文本(即,与选项名称本身相同的单词,例如"-oarg"),则在optarg中返回,否则optarg设置为零....