Optarg字符串比较C

时间:2016-10-29 18:03:22

标签: c strcmp getopt

我是C编程的新手,我有一些关于C ++的经验,但对C没什么经验。我有一个关于getopt optarg参数的问题,这是一个字符串。我想检查-x标志的输入参数是否等于“dog”。我目前的代码如下:

int main(int argc, char** argv){
  int c;
  extern char *optarg;
  extern int optind;
  extern int optopt;
  int sum=0;
  while ( (c = getopt(argc, argv, ":x:h")) != -1) {
    switch (c) {
        case 'h': getHelp();
                   break;
        case 'x': if(strcmp("dog", optarg)== 0){
                        sum = 1;
                    } else {
                        sum = 0;
                    }
                   break;
    }
}

总结一下,我想检查-x标志的输入变量是否为dog(如果是,则变量sum变为0)。在我的例子中,sum变量总是0,即使输入是'./main -x dog'。 提前谢谢大家!

1 个答案:

答案 0 :(得分:2)

评论不允许我缩进输出。所以这是一个答案。我在问题中尝试了代码,并且看到了正确的输出。

[tmp]$./a.out -x cat
Sum = 0
[tmp]$./a.out -x dog
Sum = 1

以下是代码:

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

int main(int argc, char** argv){
  int c;
  extern char *optarg;
  extern int optind;
  extern int optopt;
  int sum=0;
  while ( (c = getopt(argc, argv, ":x:h")) != -1) {
      switch (c) {
          case 'h':
                break;
          case 'x':
                if(strcmp("dog", optarg)== 0){
                    sum = 1;
                } else {
                    sum = 0;
                }
                break;
        }
    }

    printf("Sum = %d\n", sum);
}