我正在尝试学习如何接受命令行参数和跟随标志的随附数据,即

myprogram -sampleflag datahere

到目前为止,我的代码在这里。 getopt() 将数据放入变量 c 中,显然您可以从它被调用的函数外部访问 optarg。这怎么可能?根据手册页,我的代码应该可以工作!但是,如您所见,输出为 (null)。

我的代码:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    opterr = 0;
    char* cvalue = NULL;
    int c;
    char* optarg = hello;

while((c = getopt(argc, argv, "ps")) != -1){
    switch(c){
        case 'p':
            cvalue = optarg;
            printf("cvalue is : %s\n", cvalue );
            break;
        }
    }
}

我的输出:($ myprogram -p test)
cvalue is : (null)

最佳答案

来自 the manual :



因此,在您的情况下,您的选项字符串应该是 "p:s" 而不是 "ps"

关于c - getopt(3) 如何工作, 'extern' 变量 optarg 是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23400042/

10-12 22:47