我正在尝试使用getopt()的optarg参数处理参数参数,但是它保持为空。这与c99标准有关吗?我知道我实际上需要从optarg复制字符串,但是它永远都不会被设置。

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

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

    char *indir = NULL;

    while ((ch = getopt(argc, argv, "d:")) != -1) {
        switch(ch) {
            case 'd':
                indir = optarg;
                fprintf(stderr, "Optarg: %s\n", optarg);
                fprintf(stderr, "Dir name: %s\n", indir);
                break;
            default :
                fprintf(stderr, "Usage:  test -d <input directory>\n");
                exit(1);
        }
    }
    if(indir == NULL){
        fprintf(stderr, "Input directory required.\n");
        exit(1);
    }
    else{
        printf("Input dir: %s\n", indir);
    }


    return 0;
}

最佳答案

optarg是通过调用getopt()初始化的东西,您可以通过对其进行初始化来覆盖它。删除行“ char * optarg;”而且你应该很好走。

关于c - getopt()中的optarg始终为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38214785/

10-09 02:01