我编写了一个c程序(从google复制粘贴并简化)来使用getopt打印从unix命令行传入的参数值。
从Unix命令行:

./myprog -a 0 -b 1 -c 2

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

我想程序打印出每个传递的值,例如。
A = 0
B = 1
C = 2

但是它根本没有打印出任何东西。

最佳答案

在任何带参数的选项之后,您都会忘记“:”。如果你换一条线

while ((i = getopt(argc, argv, "a:b:c:")) != -1) {

你会得到工作变量。
正确阅读,它提到了第三个参数
…optstring是包含合法选项字符的字符串。如果这样的字符后跟冒号,则该选项需要一个参数,因此
getopt()在optarg中的同一个argv元素或下一个argv元素的文本中放置一个指向以下文本的指针。两个冒号表示一个选项
接受可选参数;如果当前argv元素中有文本(即,与选项名称本身在同一个单词中,例如“-oarg”),则它是
在optarg中返回,否则optarg设置为零。…

关于c - 从Unix命令行运行时,getopt无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16212218/

10-15 01:27